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

标签 c segmentation-fault 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 的返回值,而不是使用 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/

相关文章:

c - 使用 windows.h 在 Visual Studio 中进行串行通信

c - DS18b20 BBB在C代码中读取温度的问题

c - 我必须下载哪个库才能在 C 中获取 itoa()

c - 为什么“while(!feof(file))”总是错误的?

c - 读取混合类型文件中的整数, "feof"不起作用

c - Linux 内核中的 task_pt_regs

c - 为什么运行此代码时会出现运行时错误?

Django WSGI 应用程序 SegFault

c++ - 无法调整作为类成员变量的 C++ std::vector 的大小

c - 使用 fscanf() 使用 feof()