这是我的密码。我正在做一些处理文件的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",¤t->year,
current->make, current->model,¤t->cost,¤t->mileage, ¤t->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 fault和Code 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/