#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。