【发布时间】:2016-09-28 22:01:03
【问题描述】:
我使用的 fread 函数似乎没有将内容存储在缓冲区中。每当我尝试打印缓冲区时,我什么也得不到。
如何解决这个问题?
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
FILE* ptr1 = fopen("try.txt","r");
int count = 0;
while(fgetc(ptr1) != EOF)
{
count++;
}
char* buffer = malloc(sizeof(char)*count);
fread(buffer,sizeof(char),count, ptr1);
printf("%s",buffer);
fclose(ptr1);
free(buffer);
}
【问题讨论】:
-
1.您需要检查
fopen的返回值来验证它是否成功。 2. 在fgetc循环之后,流位于文件末尾。你需要rewind它回到文件的开头。 3.你需要NUL终止已经读取的数据,因为fread不太可能产生字符串。 -
总结:阅读你正在调用的函数的文档,并欣赏它们提供的返回码,以免你陷入违反Henry Spencer's 6th Commandment for C Programmers的坑。
-
另一个很好的例子,说明错误检查很重要。请参阅:如果代码不存储任何内容,则可能无法读取。所以要做的第一件事就是在
fread()上联系 RTFM,试图找出这个调用是否会以任何方式失败,如果会失败,它将如何将其传达给调用者。
标签: c file-io buffer file-handling