c语言 - 为什么 grep 给"Binary file (standard input) matches"?


#include <stdio.h>
int main()
{
    FILE* cmd = popen("grep Hello", "w");   
    fwrite("Hellon", 6, 6, cmd);
    fwrite("Hillon", 6, 6, cmd);
    fwrite("Hellon", 6, 6, cmd);   
    pclose(cmd);
}

上面的程序输出:

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

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

您试图写入36字节而不是6字节,有效地访问超出字符串末尾的字节。绝对是未定义的行为。

只需要第一个''字节。使用

fwrite("Hellon", 1, 6, cmd);

或者更简单:

fputs("Hellon", cmd);

fwrite()后面没有nul字节。您的程序出现问题的原因是您正在fwrite() 6个元素,每个元素的大小为6。

相关内容

  • 没有找到相关文章

最新更新