管数据到调用scanf函数(程序)和read()有一个C程序,它看起来是这样的:如果使用像我如何在Linux
命令我管数据到这个程序#include <stdio.h>
#include <unistd.h>
int main()
{
int n;
char str[16];
scanf("%d", &n);
printf("n: %d\n", n);
int count = read(STDIN_FILENO, str, 16);
printf("str: %s\n", str);
printf("read %d bytes\n", count);
}
(echo -en '45\n'; echo -en 'text\n') | ./program
只有scanf()
实际读取数据。 read()
只读0个字节。
换句话说,方案产出
n: 45 str: read 0 bytes
我怎么能管到的数据都scanf()
和read()
?
编辑:对不起,我应该澄清:我正在寻找一种方法来做到这一点,而无需修改源代码。感谢无论如何回答和评论的人。
你可以先加入:#include到你的代码。 –
user3629249
2014-11-02 09:11:53
scanf()的返回代码需要检查以确保操作实际将值输入到'n'中。 – user3629249 2014-11-02 09:14:40
注意:read()不会在输入末尾放置空字符。所以代码必须这样做,使用来自read()的调用的返回值来确定在哪里放置空字符。否则,printf将直接读取实际的str内容,直到它(最终)遇到空字符或导致seg错误 – user3629249 2014-11-02 09:20:52