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

时间:2014-12-03 04:37:04

标签: 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数组中的值。

我正在阅读具有以下格式的文件

姓氏名字号码 姓氏名字号码 等。

我的输出如下:

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很新,任何有关出错的解释都会受到赞赏!

1 个答案:

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