2013-04-29 52 views
2

我从一个文件中读取一个字符串,它由两个单词组成,我用令牌分割并希望它们与我的输入相比较。第一次比较正常,但不是第二次。打印语句打印输出相同的东西,但检查失败。我猜这是由于特殊的行尾字符。C比较令牌和字符串

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'; 
} 
+1

如果您发布代码化代码,您可能会得到更好的答案。这可能是问题所在。 – 2013-04-29 01:05:18

回答

6

更改您的打印语句:

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

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

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

./myprog | od -xcb 

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


(一)如果您使用的是Windows,gVim的有一个“转换为十六进制”菜单上,也可以安装cygwin或工具的GnuWin32把事情像od

+0

如果这是一个非打印字符,这可能没有帮助。将输出管道配置为'hexdump'或者打印'strlen'可能会提供更多信息。 – 2013-04-29 01:09:30

+0

这是\ n字符,因此它在输出中显示。修剪它修复它。谢谢。 – Danson 2013-04-29 01:14:07