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;

而且我似乎无法弄清楚为什么它不起作用。像这样写的while,它进入了一个无限循环。如果我尝试放入一段fscanf()时间,它会给我seg fault。那么我做错了什么?谢谢!

4

3 回答 3

1

fread()函数只接受一个类型的参数FILE *

您实际上是用文件中的数据覆盖了 C 库的内部文件表示。

请参阅任何基本参考以了解fread(). 您需要一个缓冲区,例如:

char buffer[1024];

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

此外,您当然必须检查fread(). 此外,我建议使用比fdand更好的名称fp,它们非常不透明。

于 2013-02-06T10:54:38.057 回答
1

这应该有帮助:在 C 中,我应该如何读取文本文件并打印所有字符串

使用时

 fwrite(buf, 1, nread, stdout);

stdout 是输出流。您可以使用文件流 ( FILE * ) 而不是标准输出。

于 2013-02-06T13:21:57.673 回答
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尝试读取最多SZ字节并检查它的内容,fwrite写出读取的内容。检查手册页。

于 2013-02-07T19:02:05.433 回答