C将令牌与字符串进行比较

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

我从一个由两个单词组成的文件中读取一个字符串,并用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], 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字符,因此会显示在输出中。修好它。谢谢