【问题标题】:Why can't the FILE pointer can't read the contents in the file?为什么FILE指针不能读取文件中的内容?
【发布时间】:2012-04-11 03:41:44
【问题描述】:

我正在尝试从文件 yh.dat 中获取内容,该文件包含诸如“456 78921”之类的文本以及 C 的其他内容。但是当我尝试调试代码时,FILE 指针不是 NULL(0x00428af8) _ptr 和 _base 为 NULL(0x000000)。他们说“CXX0030:Error:expression cannot beevaluate”。如何解决?

int main(){
   FILE *fp=NULL;
   fp=fopen("yh.dat","rb");
   if(fp==NULL)
   {
        printf("error");
    exit(0);
   }
   return 0;
}

【问题讨论】:

  • 您的问题“如何解决”意味着存在问题。 FILE 对象的内容是未指定的,并且因实现而异。如果fp 上的操作按预期工作,则没有理由担心fp->_ptr et al(当然,除了无聊的好奇心)。

标签: c file pointers


【解决方案1】:

为了允许您更改文件缓冲,C 不会为文件设置缓冲区,直到您发出第一次读取。因此,除非您尝试至少一次读取,否则 FILE * 指向的任何结构的成员都处于仅半初始化状态是正常的。

您是否尝试过仅读取数据以查看其是否有效?

【讨论】:

  • 您将num 传递给fscanf。它应该与它有什么关系?
  • @NobToJuneau:至少不会阻止您阅读某些内容,但while (!feof(whatever)) 本质上总是错误的。我会尝试一些简单的东西,比如:int ch; while ((ch=getc(fp) != EOF) putchar(ch);
  • @DavidSchwartz 抱歉,我忘记了 num 之前的 &
  • 该代码假定feof 可以预测未来并告诉您后续读取将失败,因此您不应该这样做。 feof 不是这样工作的。
  • @NobToJuneau 另外,perror(0) over printf("error") 的信息量更大。也可以使用 ferror()。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-22
  • 1970-01-01
  • 2011-12-16
相关资源
最近更新 更多