[英]Why a segmentation fault in feof()?
我有以下枚举和结构:
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
的返回值来代替feof
。 fread
返回传递给它的要读取的元素数。 您可以检查此数字是否不相同。 例如,
while (fread(&client, sizeof(struct Client), 1, f) == 1) {
printf("Name: %s\n", client.name);
}
编辑1:按照Weather Vane的建议,将while循环更新为更加惯用和优雅的版本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.