gpt4 book ai didi

C 标记并分析 csv 文件

转载 作者:行者123 更新时间:2023-11-30 16:40:57 25 4
gpt4 key购买 nike

我正在学习如何使用 token 来分析文件并将其放入结构数组中。我的代码编译得很好,但运行时崩溃了。有人可以帮忙吗?

这是我的代码:

struct state_info {
char code[3];
unsigned long num_records;
unsigned long total_income;
unsigned long total_vehicles;
unsigned long total_population;
unsigned long total_rent;
unsigned long total_renter;
};

int main(int argc, char *argv[]) {
const int num_states = 100;
struct state_info *states[num_states];
FILE *file = fopen(argv[i], "r");
analyze_file(file, states, num_states);
}

void analyze_file(FILE *file, struct state_info *states[], int num_states) {
const int line_sz = 100;
char line[line_sz];
while (fgets(line, line_sz, file) != NULL) {
char* token = strtok(line, " \n");
while(token != NULL) {
//allocate memory
int size = atoi(token);
if(states[size] == NULL) {
states[size] = malloc(sizeof(struct state_info));
states[size]->num_records = 0;
states[size]->total_income = 0;
states[size]->total_vehicles = 0;
states[size]->total_population = 0;
states[size]->total_rent = 0;
states[size]->total_renter = 0;
}
//add value to the states
token = strtok(NULL, " \n");
strcpy(states[size]->code, token);
token = strtok(NULL, " \n");
states[size]->total_population += atoi(token);
token = strtok(NULL, " \n");
states[size]->total_income += atoi(token);
token = strtok(NULL, " \n");
states[size]->total_vehicles += atoi(token);
token = strtok(NULL, " \n");

//calculate total rent and total renter
if(atoi(token) != 0) {
states[size]->total_rent += atoi(token);
states[size]->total_renter++;
}
}
states[size]->num_records++;
token = strtok(NULL, " \n");
}
}

我认为我的指针应该有问题,但我不确定。

最佳答案

语句struct state_info *states[num_states]不会使用NULL值初始化指针数组,因此它可能包含“垃圾”(即指针!= NULL 指向不是有效对象的东西)。

因此,像 if(states[size] == NULL) 这样的比较可能永远不会计算为 true,因此永远不会分配正确的对象。后续访问 states[size] 将导致未定义的行为(实际上访问 states[size]==... 已经是未定义的行为,但我敢打赌“crash”是由于后续访问造成的)

也许还有其他问题;但我认为这是您的代码中最明显的事情。

通过初始化状态来修复它,例如struct state_info *states[num_states] = { NULL }

关于C 标记并分析 csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46455922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com