C 使用strtok_r函数时失败

C 使用strtok_r函数时失败,c,strtok,C,Strtok,请帮我修复这个代码。我现在对strtok函数感到迷茫。我得到的消息“ISO C++禁止指针和整数之间的比较”关于“IF(TokEns[0)=] a)< < /P> if(开始和结束) { char*p=inData; 字符*代币[50]; int i=0; 而(i

请帮我修复这个代码。我现在对strtok函数感到迷茫。我得到的消息“ISO C++禁止指针和整数之间的比较”关于“IF(TokEns[0)=] a)< < /P>
if(开始和结束)
{
char*p=inData;
字符*代币[50];
int i=0;
而(i<50){
代币[i]=strtok_r(p,,,,&p);
if(令牌[i]==NULL){
打破
}
i++;
}
如果(令牌[0]==“A”){
pinMode(atoi(令牌[1]),输出;
模拟写入(atoi(令牌[1])、atoi(令牌[2]);
}
else if(令牌[0]=“D”)
{
if(atoi(令牌[2])==1)
{
pinMode(atoi(令牌[1]),输出;
数字写入(atoi(令牌[1]),高);
}
else if(atoi(令牌[2])==0)
{
pinMode(atoi(令牌[1]),输出;
数字写入(atoi(令牌[1]),低位);
}       
}
开始=错误;
结束=假;
指数=0;
}

您说错误发生在线路上

if (tokens[0] == "A")
然而,在您展示给我们的代码中没有这样的行

我想你的意思是:

if (tokens[0] == 'A')
上述方法不起作用的原因是
tokens[0]
属于
char*
类型,您无法将
char*
char
进行这样的比较。如果要比较两个字符串是否相等,则需要进行字符串比较:

if (strcmp(tokens[0], "A") == 0)
嗯,那一行(我在你的代码中找不到)真的错了
tokens[0]
是一个
char*
,而
'a'
char
。如果要比较所有字符串,请使用
strcmp
。如果要检查
tokens[0]
的第一个字符,请在
If(tokens[0]='A')
行中使用
tokens[0][0]

,字符常量'A'只是-65或0x41的ASCII值,而
tokens[0]
char*
。因此,您有一个“指针和整数之间的比较”

你想做什么?要检查令牌的第一个字符是否为大写字母a,请写入

if (tokens[0][0] == 'A')
要检查它是否是字符串“A”,请写入

此外,您使用strtok_r
是错误的。您正在使用输入缓冲区存储上下文信息,从而覆盖它。(您真的需要使用可重入版本吗?标准的strtok不需要上下文存储。)它应该是

char *token;
char *context;

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

  tokens[i++] = token;
  if (i >= 50) break;
}
此外,您最好使用
strep
来代替
strtok

char *token;
while (token = strsep(&p, ",")) {
  tokens[i++] token;
  if (i >= 50) break;
}
我没有看到任何
if(令牌[0]=“A”)
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;
}