C将令牌与字符串进行比较
我从一个由两个单词组成的文件中读取一个字符串,并用token将其拆分,然后将它们与我的输入进行比较。第一个比较很好,但第二个不好。print语句打印出相同的内容,但检查失败。我猜这是由于特殊的行尾字符C将令牌与字符串进行比较,c,C,我从一个由两个单词组成的文件中读取一个字符串,并用token将其拆分,然后将它们与我的输入进行比较。第一个比较很好,但第二个不好。print语句打印出相同的内容,但检查失败。我猜这是由于特殊的行尾字符 if(strcmp(argv[2], token[0]) == 0){ printf("Input1 match\n"); printf("%s\n", argv[3]); printf("%s\n", token[1]); if(strcmp(argv[3], t
if(strcmp(argv[2], token[0]) == 0){
printf("Input1 match\n");
printf("%s\n", argv[3]);
printf("%s\n", token[1]);
if(strcmp(argv[3], token[1]) == 0)
{
printf("Input2 match\n");
}
}
编辑:我的第二个令牌中有一个\n字符,正在使用此代码修剪字符串并修复它
void strip(char *s) {
char *p2 = s;
while(*s != '\0') {
if(*s != '\t' && *s != '\n') {
*p2++ = *s++;
} else {
++s;
}
}
*p2 = '\0';
}
将打印报表更改为:
printf("[%s]\n", argv[3]);
printf("[%s]\n", token[1]);
看看他们是否真的一样。您可能会发现令牌末尾有一个“隐藏”字符,例如
或\n
如果它甚至没有显示出来,您可以通过一个十六进制转储程序(如果您有一个可用的程序(a)),比如:
./myprog | od -xcb
然后可以检查输出中是否有可疑字符
(a) 如果您在Windows上,gVim在菜单上有一个“convert to hex”,或者您可以安装CygWin或GnuWin32工具来获得类似于
od
的内容,如果您发布代码进行标记化,您可能会得到更好的答案。这可能就是问题所在。如果是非打印字符,这可能没有帮助。将输出管道化到hextump
或打印strlen
可能会提供更多信息。它是一个\n字符,因此会显示在输出中。修好它。谢谢