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;
}

我试图将每个标记保存为结构数组中的值。
我正在从一个文件中读取以下格式
姓氏名号码
姓氏名号码
等。。
我的输出如下:
0普拉特艾琳193)760-4405
1普拉特·伊夫林
2普拉特·韦林
3普拉特·维林(193)760-4405
4普拉特·维林93)760-4405
5普拉特(193)760-4405
6普拉特艾琳3)760-4405
等。。。
输出应该是,
0阿科斯塔纳丁(752)596-6540
1阿尔福德·斯凯勒(635)736-7827
2艾莉森·劳伦斯(475)886-5725
3阿尔瓦雷斯科林(659)911-6629
4球童(328)898-9532
5巴拉德阿贝尔(853)190-0868
...
99普拉特·伊夫林(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成员。当您读取新行时,以前的指针也将获得新数据。最终每个人都会读到最后一行的字符。
另外,代码的另一个问题是返回的本地数组-line是错误的。

09-25 22:19