2012-01-27 12 views
0

このコードを修正するのを手伝ってください。私はstrtok関数で今失われています。私はメッセージを取得する「(Astrtok_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(トークン[0] == "A")'ライン – Vache

+0

申し訳ありません。 – user1165574

+1

を修正しましたか? –

答えて

0

あなたはエラーがラインに発生することを言うのトークン[0] == 『)が』場合」の行について「ISO C++はポインタと整数との間の比較を禁止」

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

あなたが私たちに示すコードには、このような行はありません。

私はあなたが実際には次のことを意味想定しています

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

以上が動作しません理由はtokens[0]がタイプchar*のものであり、あなたがこのようなcharchar*を比較することはできませんということです。あなたが平等のための2つの文字列を比較したい場合は、文字列の比較が必要になります。

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であるかどうかを確認するには、それが文字列「A」であるかどうかを確認するには

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

を書き、

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

を書くことはまた、strtok_rの使用が間違っています。コンテキスト情報を格納し、上書きするために入力バッファを使用しています。 (本当にあなたがリエントラント版を使用する必要がある理由はありますか?標準strtokはコンテキストストレージを必要としません。)それはこのようにstrtokの代わりにstrsepを使用して、あなたがオフに優れているほか

char *token; 
char *context; 

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

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

のようになります。

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