2015-06-19 93 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。比较前需要删除该角色。