首先,如果你想读字符,你应该使用fgets()
。假设你真的想用fread()
。
你必须明白fread()
返回读取的项目数,所以你的情况是0
。因为您要求fread()
读取100个字节的1个元素...如果您的文件少于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);
}
'fread'不会'== 1'如果没有在文件中100个字节。对于文本,最好使用'“rt”'模式打开文件,然后使用'fgets'。 –
@Zakir,'content'是一个字符串,但'%c'用于打印_a单个'char'_,这是行不通的。 – ForceBru
@WeatherVane:该文件是二进制文件,应该这样处理。 – 4thSpace