【问题标题】:fread function not storing into bufferfread 函数未存储到缓冲区中
【发布时间】: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


【解决方案1】:

当您计算文件中的字符时,您将 fpos 指针移动到 EOF。 然后,您正在尝试读取计数的字符数,如果不倒回文件开头,这是不可能的。 你必须使用倒带。

【讨论】:

    【解决方案2】:

    fgetc() 之后使用 rewind() 函数,它将文件位置设置为给定流文件的开头。喜欢,

    rewind(ptr1);
    

    【讨论】:

      猜你喜欢
      • 2012-04-24
      • 1970-01-01
      • 2023-03-11
      • 2013-01-17
      • 1970-01-01
      • 2021-10-24
      • 1970-01-01
      • 1970-01-01
      • 2011-06-20
      相关资源
      最近更新 更多