C:strtok覆盖以前的数组值?
card * load_rolodex(FILE *read_file) { int array_index = 0; char line [LINE_MAX]; card *card_array = malloc(sizeof(card) * upper_bound); while (fgets(line, LINE_MAX, read_file)!= NULL) { card_array[array_index].last_name = strtok(line, " "); card_array[array_index].first_name = strtok(NULL, " "); card_array[array_index].phone_number = strtok(NULL, " "); size++; array_index++; } return card_array; }
我试图将每个标记保存到struct数组中的值。
我正在阅读具有以下格式的文件
lastname firstname number lastname firstname number等。
我的输出如下:
0 Pratt elyn 193)760-4405
1 Pratt Evelyn
2 Pratt velyn
3 Pratt velyn(193)760-4405
4 Pratt velyn 93)760-4405
5 Pratt(193)760-4405
6 Pratt elyn 3)760-4405
等等…
输出应该是,
0 Acosta Nadine(752)596-6540
1 Alford Skyler (635)736-7827
2 Allison Lawrence(475)886-5725
3 Alvarez Colin(659)911-6629
4球卡德曼(328)898-9532
5 Ballard Abel (853)190-0868
…
99 Pratt Evelyn(193)760-4405
正如你所看到的,Pratt Evelyn(193)760-4405是我正在阅读的文件的最后一行,
我是C的新手,对于出了什么问题的任何解释都将不胜感激!
您需要复制要保存的字符串。 喜欢 …
card_array[array_index].last_name = strdup(strtok(line, " ")); card_array[array_index].first_name = strdup(strtok(NULL, " ")); card_array[array_index].phone_number = strdup(strtok(NULL, " "));
使用您的代码,字符数组line
被重用于所有行,其指针将被设置到card_array
成员中。 当您阅读新行时,之前的指针也将获得新数据。 最终每个人都会看到最后一行的字符。
另外,你的代码的另一个问题是你返回本地数组 – 这是错误的。