使用strtok_r函数时失败

时间:2012-01-27 11:01:15

标签: c strtok

请帮我修复此代码。我现在迷失了strtok功能。我得到消息“ISO C ++禁止指针和整数之间的比较”关于“if(tokens [0] ==”A“)”

的行
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; 
}

3 个答案:

答案 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;
}

答案 1 :(得分:0)

你说错误发生在

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

然而,您向我们展示的代码中没有这样的行。

我认为你实际上意味着以下内容:

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

以上原因不起作用的原因是tokens[0]的类型为char*,您无法将char*char进行比较。如果要比较两个字符串是否相等,则需要进行字符串比较:

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

答案 2 :(得分:0)

好吧,那行(我在你的代码中找不到)真是错误的。 tokens[0]char*'A'char。如果要比较所有字符串,请使用strcmp。如果您想查看tokens[0]的第一个字符,请使用tokens[0][0]