gpt4 book ai didi

C:strtok 覆盖以前的数组值?

转载 作者:太空宇宙 更新时间:2023-11-04 02:46:06 32 4
gpt4 key购买 nike

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,这是错误的。

关于C:strtok 覆盖以前的数组值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27263728/

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