这个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!
答案 0 :(得分:1)
fread()
函数只接受类型为FILE *
的一个参数。
您实际上是用文件中的数据覆盖C库的内部文件表示。
有关fread()
的正确原型,请参阅basic reference。你需要一个缓冲区,如:
char buffer[1024];
fread(buffer, 1, sizeof buffer, fp);
此外,您当然必须检查fread()
的返回值。此外,我建议使用比fd
和fp
更好的名称,它们非常不透明。
答案 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
写出读取的内容。查看手册页。