2013-01-25 47 views
1

我得到一個編譯器警告,下面的代碼:編譯器警告:指針目標丟失const修飾

uint8 executeSpecialCommand(const char *string) 
{ 
    char *parameters;   
    parameters = strtok(string, "="); 

    if (parameters) 
    { 
     usbSendf("\nProcessing Parameters...");  
     while(parameters != NULL) 
     { 
      parameters = strtok(NULL, " "); 
      usbSendf("\n%s", parameters); 
     } 
     return 1; 
    } 
    else 
     return 0; 
} 

誤差點3號線,我認爲這是因爲「=」。 strtok期待一個const char *以某種方式在代碼的其他部分使用相同的代碼,並且我沒有任何警告。這裏有一個想法來幫助教育我嗎?

UPDATE 我得到的錯誤是:

警告196:指針目標丟失const修飾

感謝

+0

請加入確切的錯誤信息給你的問題。 –

+0

完成請檢查更新 – jelipito

回答

1

strtok函數修改它的第一個參數。從手冊頁:

BUGS 使用這些函數時要小心。如果你使用它們,請注意:

* These functions modify their first argument. 

    * These functions cannot be used on constant strings. 

這意味着,你可以傳遞一個const char*作爲第一個參數,你與一個名爲string變量做。

strtok作品在每一個分隔符這使得它無需爲返回的字符串分配內存返回每個令牌插入傳遞的字符串以NULL。我懷疑SDCC是否支持可重入版本strtok_r,但如果它存在,則可以使用它。

另外,在解析之前創建自己的輸入字符串的副本。如果您知道最大傳入字符串大小,則可以將字符串副本分配到解析函數頂部的堆棧中。