2011-11-28 49 views
0

我使用strtok時出現問題。我希望令牌具有保留的大小,因此其內容不會破壞其他數據(我的內存很小,因爲我正在使用MCU而不是PC)。然後我決定將ir聲明爲一個聲明大小的數組。C:分配無效:左值是隻讀使用strtok

但後來我有這樣的錯誤:分配無效:左值僅

#DEFINE BUFFER_SIZE 128 
static int8 buffer[BUFFER_SIZE]; // Declared as global 

void myFunction(){ 
    char separador[3], token[BUFFER_SIZE], cmd[BUFFER_SIZE]; 
    strcpy(cmd, buffer); // buffer is a global variable declared ad 
    strcpy(separador, ",;"); 
    token = strtok(cmd, separador); // <----- ERROR 
    //... 
} 

閱讀是什麼錯誤究竟意味着什麼呢?是否因爲我沒有初始化數組?如果我聲明它是靜態的,它會起作用嗎?

+0

在互聯網上有很多使用'strtok'的例子。檢查一下,也許讀一點關於C中指針和數組的區別(我承認,這是很小的)。 –

回答

2

strtok返回cmd的位,因此您不會爲其返回值分配存儲空間。你只是想令牌是一個char*

char* token; 
+0

我剛纔給出了授予令牌存儲的字符,不僅是位。我認爲它和JAVA一樣,我認爲它就是這樣,如果我沒有錯的話。應該仔細閱讀C參考,謝謝! –

2

你應該申報

char token[BUFFER_SIZE] 

char *token 

,因爲它得到分配給cmd[BUFFER_SIZE] 令牌ADRESS內存中分配一個ADRESS不能被重組(按照你宣佈的方式)。

0

token是數組的名稱。它是一個常數,不能被留下價值。我認爲你需要char *