繁体   English   中英

为什么feof()出现分段错误?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM