gpt4 book ai didi

c - 为什么 feof() 中会出现段错误?

转载 作者:太空宇宙 更新时间:2023-11-04 08:00:45 24 4
gpt4 key购买 nike

我有以下枚举和结构:

enum Destination { unknown = 0, hosok, parlament, var };

struct Client
{
char name[30];
char email[30];
char phone_num[11];
int client_num;
enum Destination destination;
struct tm registration_date;
};

当我调用以下方法时,它读取第一个结构并打印它的名称,然后我得到一个段错误。

void list_clientss()
{
FILE *f = fopen(filename, "r");
if( f == NULL )
{
perror("Error");
}
struct Client client;
while( !feof( f ) )
{
fread(&client, sizeof(struct Client), sizeof(struct Client), f);
printf("Name: %s\n", client.name);
}
fclose(f);
}

我做错了什么?

最佳答案

首先,您的 fread 调用应该如下所示:

fread(&client, sizeof(struct Client), 1, f);

其次,您可以使用 fread 的返回值,而不是使用 feoffread 返回您传递给它的要读取的元素数。您可以检查此数字是否不同于一个。例如,

while (fread(&client, sizeof(struct Client), 1, f) == 1) {
printf("Name: %s\n", client.name);
}

编辑 1:按照 Weather Vane 的建议,将 while 循环更新为更加惯用和优雅的版本。

关于c - 为什么 feof() 中会出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46991788/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com