这是我的密码。我正在做一些处理文件的C练习
我不认为结构定义是问题所在,但我也发布了它以提供一些上下文。

 typedef struct carType Car;
struct carType {
   int vehicleID;
   char make[20];
   char model[20];
   int year;
   int mileage;
   double cost;
   Car *next;
};

我认为是这个功能导致了分割失败。
 void TextLoad(Car *headPointer)
   {
         char fileName[20];
         //prompt user for name of textfile to print to
        scanf("%s", fileName);
        FILE *fpt;
        //estabish an IO connection
        fpt = fopen(fileName, "r");
        //current car to be printed
        Car *current;
        current = headPointer->next;
        while(fscanf(fpt,"%d %s %s cost:$%f mileage:%d, vehicleID:%d",&current->year,
    current->make, current->model,&current->cost,&current->mileage, &current->vehicleID) != EOF)
        {
             current = current->next;
        }
        fclose(fpt);
    }

我测试此函数的文件包含以下内容
 2014 Toyota Celica cost:$90000 mileage:5000, vehicleID:1
 2014 Toyota Rav4 cost:$4500 mileage:4000, vehicleID:2

我所拥有的基本上是一个struct car,我想使用文件中的信息来初始化structcar的字段。有人知道这种分割失败是从哪里来的吗?我检查了其他线程fclose() causing segmentation faultCode fails with segmentation fault但我确保调用fclose以关闭IO连接,并且我没有初始化另一个文件指针,但这工作正常。
我认为问题在于fscanf,但我有正确的格式,不是吗?

最佳答案

在我看来,你没有为汽车结构分配空间。创建一个指针,但必须使用malloc为其创建内存。我认为可以用size of(carType)作为malloc的参数来获得结构的大小。这是一段时间以来,我一直使用这样的直C,在C++和C ^中,你可以使用新的调用构造函数,编译器做内存管理。
所以看起来像这样:

Car *current = malloc(sizeof(carType));//you might want to try sizeof(car) if that doesn't work

关于c - 为什么会出现 segmentation 失败?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26538843/

10-11 17:50