管道中的分段故障

thl*_*ood 1 c linux stdio segmentation-fault

鉴于以下计划:

#include <stdio.h>

int main()
{
    char buf[1024];
    scanf("%s", buf);
    printf("----> %s", buf);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

执行如下:

grep ....| a.out

要么

echo ....| a.out

我收到一个Segmentation fault错误.有谁能解释为什么?

Dav*_*fer 7

无论您是回音还是贪婪,必须包含超过1023个字符.(对于null终止符,1024 - 1.)

而不是使用scanf,使用fgets和指定大小.或者,使用scanf但指定字段长度.你可以做到scanf("%1023s", buf);.如果有更多可用字节,您可以再次执行此操作以阅读其余字节.

鉴于您的测试输入,您不应该收到段错误.我只是在本地尝试过,它工作正常.如果您使用的是Linux,那么根据您的路径配置方式a.out而不是编写./a.out,您可能正在运行错误的程序(a.out在bin文件夹中某种类型?)