1

この C コードの一部が私を悩ませており、何が間違っているのかわかりません。これは私の宿題なので、誰かに完全なコードを書かせようとしているわけではありませんが、ここで何が間違っているのか本当に知りたいです。したがって、これはメインの一部です:

FILE *fp,*fd;
fp=fopen("test1.txt","r");
if (fp==NULL)
    return -1;
fd=fopen("test2.txt","w");
if (fd==NULL)
    return -2;
while (fp != EOF){
    fread(fd,1,10,fp);
}
//read_copy(fp,fd);
fclose(fp);
fclose(fd);
return 0;

そして、なぜそれが機能しないのか理解できないようです。このように書かれている間、それは無限ループに入ります。しばらく入れようとするとfscanf()、 になりますseg fault。それで、私は何を間違っていますか?どうも!

4

3 に答える 3

1

これは役立つはずです:Cでは、テキストファイルを読み取ってすべての文字列を印刷するにはどうすればよいですか?

使用する場合

 fwrite(buf, 1, nread, stdout);

stdoutは出力ストリームです。stdoutの代わりにファイルストリーム(FILE *)を使用できます。

于 2013-02-06T13:21:57.673 に答える
1

関数は typeの引数を1 つfread()だけ受け入れます。FILE *

基本的に、C ライブラリの内部ファイル表現をファイルのデータで上書きしています。

の適切なプロトタイプについては、基本的なリファレンスを参照してくださいfread()。次のようなバッファが必要です。

char buffer[1024];

fread(buffer, 1, sizeof buffer, fp);

また、もちろん の戻り値を確認する必要がありますfread()fdさらに、 andよりも適切な名前を使用することをお勧めしfpます。これらはかなり不透明です。

于 2013-02-06T10:54:38.057 に答える
0

データをバッファに読み込んで書き出す必要があります。何かのようなもの:

FILE *in, *out;
char buffer[SZ]; /* Define some size */
int nrd;

/* Do the whole dance opening files, etc */

while((nrd = fread(buffer, 1, SZ,  in)) > 0)
    fwrite(buffer, 1, nrd, out);

/* If nrd == 0 --> Reached EOF
   If nrd <  0 --> Some kind of error */

の条件はバイトwhileまで読み取ろうとし、何が読み取られたかをチェックし、読み取られたものを書き出します。マニュアルページを確認してください。SZfwrite

于 2013-02-07T19:02:05.433 に答える