#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会给出消息,以及如何修复它?
答案 0 :(得分:5)
您正在尝试写入36个字节而不是6个字节,从而有效地访问字符串末尾之外的字节。绝对未定义的行为。只需要第一个'\0'
字节。
使用
fwrite("Hello\n", 1, 6, cmd);
或更简单:
fputs("Hello\n", cmd);
答案 1 :(得分:2)
nul
附加fwrite()
个字节。您的程序出现问题的原因是因为您fwrite()
6个元素,每个元素大小为6。