strtok会覆盖我的变量

时间:2014-02-06 04:51:52

标签: c strtok

我正在尝试使用strtok()将信息存储到我的结构中。我的代码看起来像这样

char *tempType = NULL, name[100], fileString[100];
int *tempItems = NULL, *tempCost = NULL;
FILE *infile = NULL;
ItemType myVector;

infile = fopen ("grocery_list.txt", "r");

while (!feof (infile))
{
    fscanf (infile, "%s", &fileString);
    tempType = strtok (fileString, ":");
    tempCost = (int *) strtok (NULL, ":");
    tempItems = (int *) strtok (NULL,":");
    myVector.type[num_items] = tempType;
    myVector.cost[num_items] = tempCost;
    myVector.items[num_items] = tempItems;
    num_items++;
}

每次我运行它,myVector.type中的所有值都变成“樱桃”,我不知道为什么。我的infile: 苹果:5:1 乳:3:2 面包:3:1 糖果:10:1 奶酪:5:6 桔子:4:2 樱桃:3:2

1 个答案:

答案 0 :(得分:1)

函数strtok返回一个指针,每次执行while循环都会覆盖此指针。所以最后所有数组条目都指向相同的内存地址。你需要复制字符串strtok返回。