从c中读取文件

时间:2013-02-06 10:52:50

标签: c

这个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。那么我做错了什么? THX!

3 个答案:

答案 0 :(得分:1)

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

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

有关fread()的正确原型,请参阅basic reference。你需要一个缓冲区,如:

char buffer[1024];

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

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

答案 1 :(得分:1)

这应该有所帮助:In C, how should I read a text file and print all strings

使用时

 fwrite(buf, 1, nread, stdout);

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

答案 2 :(得分: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写出读取的内容。查看手册页。