为什么文件读取输出没有?

时间:2017-06-16 18:25:27

标签: c

在二进制文件mydata.dat中,我写了一个字符串:“这是一个测试”。这是文件的全部内容。我想读回字符串,但我没有看到任何输出。程序运行没有错误。知道我做错了什么吗?

FILE *f = fopen("mydata.dat", "rb");

char content[100];

while(fread(content, sizeof(content), 1, f) == 1){
    printf("%s", content);
}
fclose(f);

1 个答案:

答案 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);
}