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