2014-02-06 12 views
-1

我想使用的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

+2

這不會編譯。沒有稱爲'num_items'的變量。 –

+0

對不起,上面的行有int num_items = 0;但我忘了複製它 – user3277932

+1

改正此:'fscanf(infile,「%s」,&fileString);'作爲'fscanf(infile,「%s」,fileString);' –

回答

1

的函數strtok返回一個指針,並且該指針被while循環的每次執行覆蓋。所以最後所有的數組條目指向相同的內存地址。你需要複製字符串strtok返回。

+0

因此我嘗試添加: strcpy(name,temp); myVector.type [num_items] = name; 但同樣的問題一直在發生 – user3277932

+1

ItemType是如何定義的? – steve

+0

typedef結構的ItemType { \t字符*類型[100]; \t int * cost [100]; \t int * items [100]; } ItemType; – user3277932