管數據到調用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