如何在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';