在二进制文件mydata.dat中,我写了一个字符串:“这是一个测试”。这是文件的全部内容。我想读回字符串,但我没有看到任何输出。程序运行没有错误。知道我做错了什么吗?
FILE *f = fopen("mydata.dat", "rb");
char content[100];
while(fread(content, sizeof(content), 1, f) == 1){
printf("%s", content);
}
fclose(f);
答案 0 :(得分:4)
首先,如果您想阅读字符,则应使用fgets()
。假设你真的想使用fread()
。
您必须明白fread()
会返回读取的项目数,因此在您的情况下,它是0
。因为您要求fread()
读取1个100字节的元素...如果您的文件少于100个字节,这将始终返回0
。您已经交换了元素的大小和元素的数量。
另外,如果您希望您的数组是有效的C字符串,则必须在结尾处放置一个NULL终结符字节。因为fread()
不会为你做这件事。
示例:
#include <stdio.h>
int main(void) {
FILE *f = fopen("mydata.dat", "rb");
if (f == NULL) { // Error check
perror("fopen()");
return 1;
}
char content[100];
size_t ret;
// We loop on the file to read 99 bytes at each loop
// sizeof *content is the size of an element of content
while ((ret = fread(content, sizeof *content, sizeof content - 1, f)) > 0) {
content[ret] = '\0'; // We use ret to nul terminate our string
printf("%s", content);
fflush(stdout); // flush the standard output
}
fclose(f);
}