C 将标记与字符串进行比较

标签 c

我从一个文件中读取了一个字符串,该文件由两个单词组成,我用 token 将其拆分,并希望将它们与我的输入进行比较。第一个比较工作正常但不是第二个。打印语句打印出同样的东西,但检查失败。我猜这是由于特殊的行尾字符。

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]);

看看它们是否真的相同。您可能会发现 token 末尾有一个“隐藏”字符,例如 <space>\n .

如果它没有出现,你可以通过一个十六进制转储程序管道输出,如果你有一个可用的(a),比如:

./myprog | od -xcb

然后您可以检查输出中是否有可疑字符。


(a) 如果您使用的是 Windows,gVim 的菜单上有一个“转换为十六进制”,或者您可以安装 CygWin 或 GnuWin32 工具来获得像 od 这样的东西。 .

关于C 将标记与字符串进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16269825/

相关文章:

C 程序循环行和列

c - ~ 运算符会更改数据类型吗?

C指针数组

c - 在结构变量中获取字符串和整数

c - 当您在 C(和其他语言)中声明一个变量时,幕后会发生什么?

c - C 中的递归快速排序

c - nan 使用带有 math.h 函数的 long double 返回

C动态分配结构数组及其组件

c - 得到一个奇数,太奇怪了

c - 我怎样才能使 fscanf 更多 'stringent' 或完全不同的方法来解决我的额外行?