为什么grep给出"二进制文件(标准输入)匹配"?

时间:2015-06-09 00:55:22

标签: c file api io pipe

#include <stdio.h>

int main()
{
    FILE* cmd = popen("grep Hello", "w");   
    fwrite("Hello\n", 6, 6, cmd);
    fwrite("Hillo\n", 6, 6, cmd);
    fwrite("Hello\n", 6, 6, cmd);   
    pclose(cmd);
}

上述程序输出:

  

二进制文件(标准输入)匹配

为什么grep会给出消息,以及如何修复它?

2 个答案:

答案 0 :(得分:5)

您正在尝试写入36个字节而不是6个字节,从而有效地访问字符串末尾之外的字节。绝对未定义的行为。只需要第一个'\0'字节。

使用

fwrite("Hello\n", 1, 6, cmd);

或更简单:

fputs("Hello\n", cmd);

答案 1 :(得分:2)

nul附加fwrite()个字节。您的程序出现问题的原因是因为您fwrite() 6个元素,每个元素大小为6。