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数组中的值。
我正在阅读具有以下格式的文件
姓氏名字号码 姓氏名字号码 等。
我的输出如下:
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 Ball Cadman(328)898-9532
5 Ballard Abel(853)190-0868
...
99 Pratt Evelyn(193)760-4405
如您所见,Pratt Evelyn(193)760-4405是我正在阅读的文件的最后一行,
我对C很新,任何有关出错的解释都会受到赞赏!
答案 0 :(得分:2)
您需要复制要保存的字符串。喜欢......
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
成员。当您阅读新行时,之前的指针也将获得新数据。最终每个人都会看到最后一行的字符。
此外,您的代码的另一个问题是您返回本地数组 - line
这是错误的。