当前位置: 技术问答>linux和unix
read函数的小问题
来源: 互联网 发布时间:2016-12-21
本文导语: #include #include #include int main() { char buf[7] = {''}; int n = 0; do { n = read(STDIN_FILENO, buf, 6); //fputs(buf); printf("%sn", buf); //fflush(stdin); }while (6 == n); return 0; } 运行结果让我吃惊!!!!! [root@localhost work1]# ./1 1234 ...
#include
#include
#include
int main()
{
char buf[7] = {''};
int n = 0;
do
{
n = read(STDIN_FILENO, buf, 6);
//fputs(buf);
printf("%sn", buf);
//fflush(stdin);
}while (6 == n);
return 0;
}
运行结果让我吃惊!!!!!
[root@localhost work1]# ./1
1234 43545
1234 4
3545
4
[root@localhost work1]# ./1
123456123456
123456
123456
23456
[root@localhost work1]#
为什么会有个尾巴??23456啊?最后应该只是一个换行啊?
|
read碰到文件结束符会结束读取,但是你每次输入的最后一个字符肯定是换行符,所以换行符肯定会被读入,读入换行符后就没什么好读了,但是你的数组里面本来就有数据,当然要输出了!
以第一个输入为例:输入1234 43545,第一次读入1234 4,没什么好说的,且n为6;
第二次,读入的不仅是3545还有换行符,而且第六个字符4还在数组中所以输出为3545n4,因为换行符后无输入,n为5,程序结束!
以第一个输入为例:输入1234 43545,第一次读入1234 4,没什么好说的,且n为6;
第二次,读入的不仅是3545还有换行符,而且第六个字符4还在数组中所以输出为3545n4,因为换行符后无输入,n为5,程序结束!
|
楼主,你拿调试工具逐行调试一下,主要是没处理回车的问题
|
打印过后buf没有清空。