请帮我修复此代码。我现在迷失了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;
}
答案 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]
。