我从一个文件中读取一个字符串,该文件由两个单词组成,我用标记分开,并希望它们与我的输入进行比较。第一次比较工作正常但不是第二次。打印语句打印输出相同但检查失败。我猜这是由于特殊的行尾字符。
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';
}
答案 0 :(得分:6)
将您的打印报表更改为:
printf("[%s]\n", argv[3]);
printf("[%s]\n", token[1]);
看看他们是否真的相同。你可能会发现令牌末尾有一个“隐藏”字符,例如<space>
或\n
。
如果它没有出现,你可以通过十六进制转储程序管道输出,如果你有一个可用的(a),如下所示:
./myprog | od -xcb
然后你可以检查可疑字符的输出。
(a)如果你在Windows上,gVim在菜单上有一个“转换为十六进制”,或者你可以安装CygWin或GnuWin32工具来获取od
之类的东西。