2013-04-29 75 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