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成员中。 当您阅读新行时,之前的指针也将获得新数据。 最终每个人都会看到最后一行的字符。

另外,你的代码的另一个问题是你返回本地数组 – 这是错误的。