C 为什么可以';t文件指针可以';你不读文件里的内容吗?

C 为什么可以';t文件指针可以';你不读文件里的内容吗?,c,file,pointers,C,File,Pointers,我试图从yh.dat文件中获取内容,该文件的文本类似于“456 78921”以及其他由C编写的内容。但是当我尝试调试代码时,文件指针不是空的(0x00428af8),并且_ptr和_base是空的(0x000000)。他们说“CXX0030:错误:表达式无法计算”。如何解决它 int main(){ FILE *fp=NULL; fp=fopen("yh.dat","rb"); if(fp==NULL) { printf("error"); exi

我试图从yh.dat文件中获取内容,该文件的文本类似于“456 78921”以及其他由C编写的内容。但是当我尝试调试代码时,文件指针不是空的(0x00428af8),并且_ptr和_base是空的(0x000000)。他们说“CXX0030:错误:表达式无法计算”。如何解决它

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

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


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

您的问题“如何解决它”意味着存在问题。
文件
对象的内容未指定,并且在不同的实现中有所不同。如果
fp
上的操作按预期工作,那么就没有理由担心
fp->\u ptr
等(当然,除了空闲的好奇心)。您正在将
num
的值传递给
fscanf
。这和它有什么关系?@NobToJuneau:它至少不会阻止你阅读一些东西,但是
而(!feof(whatever))
基本上总是错误的。我会尝试一些简单的方法,比如:
intch;虽然((ch=getc(fp)!=EOF)putchar(ch);
@DavidSchwartz很抱歉,我忘记了&before num,该代码假定
feof
可以预测未来,并告诉您后续读取将失败,因此您不应该这样做。
feof
不是这样工作的。@NobToJuneau还有一个perror(0)over printf(“错误”)主要是提供更多信息。也可以使用ferror()。