C fread没有';我不知道该怎么做

C fread没有';我不知道该怎么做,c,struct,fread,fseek,C,Struct,Fread,Fseek,我试图读取我的file*fp指向的文件,我想知道文件的结尾在哪里。因此我使用fseek()在文件末尾,我想从我的结构数据中写入数据 void printData(FILE *fp) { struct data tmp; fseek(fp,0,SEEK_END); while(fread(&tmp,sizeof(struct data),1,fp) > 0) { puts("test2"); printf("Vornam

我试图读取我的
file*
fp指向的文件,我想知道文件的结尾在哪里。因此我使用
fseek()
在文件末尾,我想从我的
结构数据中写入数据

void printData(FILE *fp)
{
    struct data tmp;
    fseek(fp,0,SEEK_END);
    while(fread(&tmp,sizeof(struct data),1,fp) > 0)
    {
        puts("test2");
        printf("Vorname: %s\n",tmp.vorname);
        printf("Nachname: %s\n",tmp.name);
        printf("Adresse: %s\n",tmp.adresse);

    }
}
我的结构就是这样定义的:

struct data
{
    char name[30];
    char vorname[20];
    char adresse[50];
};

我的问题是,while循环甚至没有执行一次。我忘了什么吗?

您正在查找文件的开头,因为您正在将偏移量设置为0。这听起来不像是你想要做的,但另一方面,寻找到底,然后尝试阅读也会失败。我很困惑/

你的意思是
fwrite()
,而不是'fread()?不太可能,因为代码的其余部分在I/O之后打印结果,这对于读取来说是合乎逻辑的,但对于写入来说不是


提供更多信息会很有帮助,例如您的文件已打开以及运行程序时它包含的内容。

您正在查找文件的开头,因为您正在将偏移量设置为0。这听起来不像是你想要做的,但另一方面,寻找到底,然后尝试阅读也会失败。我很困惑/

你的意思是
fwrite()
,而不是'fread()?不太可能,因为代码的其余部分在I/O之后打印结果,这对于读取来说是合乎逻辑的,但对于写入来说不是


提供更多信息会很有帮助,例如您的文件已打开以及运行程序时它包含的内容。

fread中的第三个变量“1”实际上表示要读取的项目数,而您只读取一个项目。请参阅fread文件了解以下信息:

fread中的第三个变量“1”实际上表示要读取的项目数,而您只读取一个项目。请参阅fread文件了解以下信息:

fseek(fp,0,SEEK\u END)
将文件指针定位在文件末尾(文件偏移量0的起点结尾),然后尝试从文件读取时,fread当然不会读取任何内容

相反,在追加模式下打开文件并写入记录数,这些记录数将追加到文件中。

fseek(fp,0,SEEK\u END)
将文件指针定位在文件末尾(文件偏移量0的起点结尾),然后尝试从文件读取时,fread当然不会读取任何内容


相反,以附加模式打开文件并重新写入记录数,这些记录将附加到文件。

在查找文件末尾后,您将无法读取任何内容。如果你只想知道文件大小,你可以使用mybe来代替
fstat()

搜索到文件末尾后,您将无法读取任何内容。如果你只想知道文件大小,你可以使用mybe来代替
fstat()

fread()
用于从文件中读取内容,而不是用于写入

使用
fwrite()
将内容写入文件

比如:

阅读更多关于: 并且

fread()
用于从文件中读取内容,而不是用于写入

使用
fwrite()
将内容写入文件

比如:

阅读更多关于:
而且

谢谢,我把它改成了SEEK_END。谢谢,我把它改成了SEEK_END。看起来有点混乱-在你的描述中,你说你想写,但你的代码显示正在阅读。我想他的意思是他想在屏幕上显示数据…哦。。我的错。。实际上,他想补充的内容似乎有点让人困惑——在你的描述中,你说你想写,但你的代码显示的是阅读。我想他的意思是他想在屏幕上显示数据……哦。。我的错。。他实际上想附加
fwrite(&tmp , 1 , sizeof(struct data) , fp );