Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C中读取管道内容?_C_Stdin_Pipe - Fatal编程技术网

如何在C中读取管道内容?

如何在C中读取管道内容?,c,stdin,pipe,C,Stdin,Pipe,我希望能够做到这一点: $ echo "hello world" | ./my-c-program piped input: >>hello world<< 我使用以下方法编译了此文件: gcc -o my-c-program my-c-program.c 它几乎可以工作,除了它似乎总是在管道内容字符串的末尾添加一个U+FFFD替换字符和一个换行符(尽管我理解换行符)。为什么会发生这种情况,如何避免这个问题 echo "hello world" | ./my-c-pr

我希望能够做到这一点:

$ echo "hello world" | ./my-c-program
piped input: >>hello world<<
我使用以下方法编译了此文件:

gcc -o my-c-program my-c-program.c
它几乎可以工作,除了它似乎总是在管道内容字符串的末尾添加一个U+FFFD替换字符和一个换行符(尽管我理解换行符)。为什么会发生这种情况,如何避免这个问题

echo "hello world" | ./my-c-program
piped content: >>hello world
�<<
echo“hello world”|/my-c-program
管道内容:>>你好,世界

� 替换符号会出现,因为您忘记了NUL终止字符串

之所以有换行符,是因为默认情况下,
echo
在其输出的末尾插入
'\n'

如果不想插入
'\n'
,请使用以下命令:

echo -n "test" | ./my-c-program
和删除错误的字符插入

pipe[i-1] = '\0';
在打印文本之前


注意,您需要使用
i-1
作为空字符,因为您实现循环测试的方式不同。在您的代码中,
i
在最后一个字符之后再次递增。

这两个
pipe[i-1]='\0'
pipe[i-1]=0似乎有效。谢谢大家!@H2CO3为什么删除您的答案?这是唯一一个解释发生了什么事的人。还是不正确?
pipe[i-1] = '\0';