2012-01-27 121 views
0

請幫我修復這段代碼。我現在失去了strtok功能。我得到消息「ISO C++禁止指針和整數之間的比較」約行「如果(令牌[0] ==‘A’)」使用strtok_r函數失敗

if (started && ended) 
{ 


    char *p = inData; 
    char *tokens[50]; 
    int i = 0; 

    while (i < 50) { 
    tokens[i] = strtok_r(p,",",&p); 
    if (tokens[i] == NULL) { 
     break; 
    } 
    i++; 
    } 


    if (tokens[0] == 'A'){ 
    pinMode(atoi(tokens[1]),OUTPUT);  
    analogWrite(atoi(tokens[1]),atoi(tokens[2])); 
    } 

    else if (tokens[0] == 'D') 
    { 
    if (atoi(tokens[2]) == 1) 
    { 
    pinMode(atoi(tokens[1]),OUTPUT); 
    digitalWrite(atoi(tokens[1]),HIGH); 
    } 
    else if (atoi(tokens[2]) == 0) 
    { 
    pinMode (atoi(tokens[1]),OUTPUT); 
    digitalWrite(atoi(tokens[1]),LOW); 
    }  
} 



    started = false; 
    ended = false; 
    index = 0; 
} 
+1

我沒有看到任何'if(tokens [0] ==「A」)'line – Vache 2012-01-27 11:31:43

+0

對不起。更正了 – user1165574 2012-01-27 11:33:14

+1

你在哪裏糾正了它? – 2012-01-27 11:41:40

回答

0

你說就行發生錯誤

if (tokens[0] == "A") 

但是,您向我們展示的代碼中沒有這樣的行。

我想你實際上意味着以下幾點:

if (tokens[0] == 'A') 

究其原因,上述將無法正常工作是tokens[0]char*類型,你不能比較一個char*char這樣。

if (strcmp(tokens[0], "A") == 0) 
0

嗯,那行(我不能在你的代碼中找到)是真的錯了:如果你想兩個字符串比較平等,你需要一個字符串比較。 tokens[0]char*'A'char。如果要比較所有字符串,請使用strcmp。如果您想檢查tokens[0]的第一個字符,請使用tokens[0][0]

2

在行if (tokens[0] == 'A')中,字符常量'A'只是A-65或0x41的ASCII值,而tokens[0]char *。因此你有一個「指針和整數之間的比較」。

你是什麼意思?要檢查記號的第一個字符是一個大寫的A,寫

if (tokens[0][0] == 'A') 

要檢查它是否是字符串「A」,寫

if (strcmp(tokens[0], "A") == 0) 

而且,你的strtok_r使用是錯誤的。您正在使用輸入緩衝區來存儲上下文信息並覆蓋它。 (難道真有你需要使用重入版本的一個原因?該標準strtok不需要上下文存儲)。它應該看起來像

char *token; 
char *context; 

for (token = strtok(p, ",", &context); 
    token; 
    token = strtok(NULL, ",", &context)) { 

    tokens[i++] = token; 
    if (i >= 50) break; 
} 

此外,你最好使用strsep代替strtok這樣

char *token; 
while (token = strsep(&p, ",")) { 
    tokens[i++] token; 
    if (i >= 50) break; 
}