2014-04-17 51 views
0

我有我的代碼有問題,我不斷收到編譯器錯誤:C語言的strtok有一些錯誤

error message : warning: assignment makes pointer from integer without a cast

我的代碼很簡單:

int i; 
int arr1[8], arr2[8]; 
char test[] = "1|a|b;2|c|d;3|e|f"; 
char *split1, *split2; 

split1 = strtok(test, ";"); 
for(i = 1; i <= 8; i++){ 
    arr1[i] = split1; 
    split1 = strtok(NULL, ";"); 
    printf("result=%s\n", arr1[i]); 
} 

當我修復編譯器錯誤,我的代碼無法打印價值,反之亦然!

+0

'arr [8]'不存在;你不要使用'arr [0]' – pmg

+0

將arr1改爲char * – cup

+0

爲什麼要將指向字符串的指針放入整數數組中? – AntonH

回答

1

除了在你的問題中提到的錯誤,你也有很多其他的錯誤。例如:

arr1[i]=split1; 

可變split1,一個指針到char,而arr1int陣列。

要將包含數字的字符串轉換爲整數,可以使用strtol

如果這不是你想要的,你需要做arr1字符串數組,即指針數組char

char *arr1[8]; 

你也有一個更嚴重的錯誤,一旦你得到的程序編譯:數組索引是零基於。這意味着數組索引從零到大小減1,或者在arr1的情況下,索引從07(含)。索引數組越界會導致undefined behavior

未定義行爲的另一種情況是這條線

printf("result=%s\n",arr1[i]); 

在這裏,你想打印一個字符串,而是提供一個整數。如果您將arr1更改爲字符串數組,則這不適用。

+0

該行正在從指針開始生成一個整數。錯誤信息表示來自整數的指針。 – Barmar

+0

爲什麼他會在這段代碼中使用'strtol'?他的輸入數據不是數字。第一個標記是'1 | a | b'。 – Barmar

3

error message : warning: assignment makes pointer from integer without a cast

您需要包括編譯器正確的原型知道該函數返回(或者它會假設他們返回int)什麼類型的。

strtok()的原型在<string.h>

#include <string.h> 

    split1=strtok(NULL,";"); // without a prototype 
          // the compiler assumes strtok() returns an int 
          // and complains about assigning the int to a pointer 
0

編譯器發出警告,指出指針指向一個int值是錯誤的。首先因爲指針可以是更大的尺寸,然後int。 你的情況 - 你需要指定一個不是指針,而是它引用的值(所以只需使用arr1 [i] = * split1;

但首先檢查split1是否不爲NULL,如果解除引用NULL值你的應用程序會崩潰

順便說一句,我建議你注意以前的答案,因爲它們包含了很多有用的信息給你。