2015-06-19 96 views
-1
#include <stdio.h> 

int main(int argc, char const *argv[]) 
{ 
    FILE *ls = popen("tmp.sh", "r"); 
    char char_array[256]; 
    while (fgets(char_array, sizeof(char_array), ls) != 0) { 
     //NOP 
    } 
    char *ptr_somechar = &char_array[0]; 
    char *pointer = "high"; 
    if (strcmp(pointer, ptr_somechar) == 0) 
    { 
     printf("%s\n", "match"); 
    } else 
    { 
     printf("%s\n", "not matched"); 
    } 
    pclose(ls); 
    return 0; 
} 

我想比較輸出與行。 tmp.sh返回「高」。爲什麼這段代碼總是打印「不匹配」?爲什麼這段代碼總是打印「不匹配」?

+1

只是一個瘋狂的猜測:難道是tmp.sh打印「高」,包括換行符(例如,當使用'echo')...? –

+0

你chmod x那個shell腳本嗎? –

+0

它似乎代碼正在讀取文件'tmp.sh'的內容。逐行。當嘗試進行比較時,strcmp()從輸入緩衝區中的第一個字符處開始。很可能'高'不是輸入緩衝區中的第一個字符,它是從tmp.sh文件中讀取的最後一行。建議使用substr()(或類似的函數)來搜索整行)並搜索每一行,而不僅僅是最後一行。 – user3629249

回答

2

看起來文件中的字符串"high"後面跟着換行符,而fgets也讀取了\n。比較前需要刪除該角色。