2つの文字列を読み込んでそれを連結して
一つの文字列として出力したいので、文字列操作
関連の関数をいろいろといじってみたのですが、
どうしても改行が入ってしまい、上手にいきません。
下にしるした例も非常にわかりずらいかと思いますが、
どうか問題点を教えていただきたいです。
よろしくお願いします。
char buf1[256],buf2[256];
char *buf;
char s1[/url] = "\n";
while(fgets(buf2,256,F_input) != NULL){
buf = strtok(buf2,s1); //\nをはずす
while(fgets(buf2,256,F_material) != NULL){
for(i = 0;i < 256;i ++)
buf1 = buf;
strcat(buf1,buf2);
fputs(buf1,F_output);
}
例文字列1 = 123456789 文字列2 = qwertyuio //各最後は改行されている文字列だと思ってください。
現在の出力
123456789
qwertyuio
123456789
qwertyuio
希望の出力
123456789qwertyuio
123456789qwertyuio
文字列操作<改行が消せない>
Re:文字列操作<改行が消せない>
> while(fgets(buf2,256,F_input) != NULL){
> buf = strtok(buf2,s1); //\nをはずす
fgets()で読んだ文字列の、'\0'直前の'\n'を外す定番の(と思われる)やり方は
if (buf2[strlen(buf2)-1] == '\n')
buf2[strlen(buf2)-1] = '\0;
です。中間バッファbufは不要です。
そして、
> while(fgets(buf2,256,F_material) != NULL){
ここではbuf2ではなくbuf1に読み込んで
> for(i = 0;i < 256;i ++)
> buf1 = buf;
このfor文を外して、
> strcat(buf1,buf2);
> fputs(buf1,F_output);
こうすればよいでしょう。
> buf = strtok(buf2,s1); //\nをはずす
fgets()で読んだ文字列の、'\0'直前の'\n'を外す定番の(と思われる)やり方は
if (buf2[strlen(buf2)-1] == '\n')
buf2[strlen(buf2)-1] = '\0;
です。中間バッファbufは不要です。
そして、
> while(fgets(buf2,256,F_material) != NULL){
ここではbuf2ではなくbuf1に読み込んで
> for(i = 0;i < 256;i ++)
> buf1 = buf;
このfor文を外して、
> strcat(buf1,buf2);
> fputs(buf1,F_output);
こうすればよいでしょう。
Re:文字列操作<改行が消せない>
バックアップ中で時間あまってるので
ペタリ
ペタリ
#include <stdio.h> #include <memory.h> #include <string.h> int main() { FILE *file = fopen( "hoge.txt", "rt" ); if( file == NULL ) { printf( "file not found.\n" ); return -1; } int len; char buf[256], out[1024]; memset( buf, 0, sizeof(buf) ); memset( out, 0, sizeof(out) ); fgets( buf, sizeof(buf), file ); strcpy( out, buf ); len = strlen(out); out[len-1] = 0; while( !feof(file) ) { fgets( buf, sizeof(buf), file ); int len = strlen(buf); buf[len-1] = 0; strcat( out, buf ); } fclose( file ); file = 0; file = fopen( "out.txt", "wt" ); if( file == NULL ) { printf( "file not open.\n" ); return -1; } fputs( out, file ); fclose( file ); file = 0; return 0; }
Re:文字列操作<改行が消せない>
質問への回答ではありませんが、
ファイルの2行づつを1行にまとめるのなら、こんな方法もあります。
#include <stdio.h> int main(int argc, char *argv[/url]) { int c, i; FILE *fin, *fout; if(argc != 3){ puts("Parameter Error"); return 1; } if(!(fin = fopen(argv[1], "r"))){ puts("InputFile Open Error"); return 1; } if(!(fout = fopen(argv[2], "w"))){ puts("OutputFile Open Error"); fclose(fin); return 1; } for(i = 0; (c = fgetc(fin)) != EOF; i ^= (c == '\n')) { if(i || c != '\n') fputc(c, fout); } fclose(fin); fclose(fout); return 0; }
Re:文字列操作<改行が消せない>
みなさんありがとうございました。
おかげで無事解決しました。
今回はboxさんのおっしゃるやり方で
最終的に完成させていただきました。
全体のソースまで載せていただいたり
別の方面からのアプローチの仕方を
載せていただいたりと、本当にありがとうございました。
おかげで無事解決しました。
今回はboxさんのおっしゃるやり方で
最終的に完成させていただきました。
全体のソースまで載せていただいたり
別の方面からのアプローチの仕方を
載せていただいたりと、本当にありがとうございました。