2012-01-27 11 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*의 점이다 이유, 당신은이 같은 char*char A를 비교할 수 없습니다.

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

음, (I 코드에서 찾을 수 없습니다) 그 라인은 정말 잘못된 것입니다 : 당신이 어떤지 두 개의 문자열을 비교하려는 경우 문자열 비교가 필요합니다. 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는 상황에 맞는 스토리지를 필요로하지 않습니다.) 그것은이 같은 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; 
} 
관련 문제