3

我从一个文件中读取了一个字符串,该字符串由两个单词组成,我用令牌拆分了这些单词,并希望将它们与我的输入进行比较。第一个比较工作正常,但不是第二个。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';
}
4

1 回答 1

6

将您的打印语句更改为:

printf("[%s]\n", argv[3]);
printf("[%s]\n", token[1]);

看看他们是否真的一样。您可能会发现标记末尾有一个“隐藏”字符,例如<space>or \n

如果即使这样也没有显示,您可以通过十六进制转储程序管道输出,如果您有一个可用的 (a),例如:

./myprog | od -xcb

然后您可以检查输出中的可疑字符。


(a)如果你在 Windows 上,gVim 在菜单上有一个“转换为十六进制”,或者你可以安装 CygWin 或 GnuWin32 工具来获得类似od.

于 2013-04-29T01:04:18.950 回答