read 赋值问题

xht19842 2011-11-29 05:17:53
read 赋值问题
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
int main()
{
char buffer[4];
int a;

a = read(0, buffer, 4);
if (a = -1)

write(2, "abc\n", 3);

exit (0);
}


如果输入4位以上的话 他是会返回-1吗?

如果返回-1的话

他是不是因该返回我输入的字符串前3位啊??

为啥输入超过4位以上。。。这个例子报错啊。。。

新手 请教
...全文
50 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
程序员小迷 2012-02-05
  • 打赏
  • 举报
回复
你看看read的文档,输入的东西多了返回什么
自信男孩 2011-11-29
  • 打赏
  • 举报
回复
int ret = read(0, buf, 4);read函数的返回值:0:说明读到了文件的结尾,大于0:说明是实际读到的字节数,这个数会小于等于read函数中的第三个参数;小于0,(即-1):说明读取错误。
modicum_ck 2011-11-29
  • 打赏
  • 举报
回复
不好意思上面说错了
如果是4位或4位以上的话,它返回的是4,4位以下是几就返回几,出错返回-1。

改为

应该是4位以上的话,返回4, 4位以下返回-1
modicum_ck 2011-11-29
  • 打赏
  • 举报
回复
这个程序写的有问题,首先是if(a = -1)
这样的话a永远是-1,而不是read返回的是-1。
应该是if (a == -1),一个等号是赋值,两个等号才是比较,楼主粗心了。

如果是4位或4位以上的话,它返回的是4,4位以下是几就返回几,出错返回-1。
如果是返回-1的话,那么就执行write(2, "abc\n", 3)这条语句,即在屏幕输出abc。还有一个\n所以应该是write(2, "abc\n", 4);

输入超过4位以上因为read只读4个字符,多出来的部分还在输入缓冲区,当程序结束会更新缓冲区,多余部分会打印在shell命令行上,这就是你说出错的原因。
你可以输入1234ls
然后就会显示你当前目录下的文件夹了。
nuaazdh 2011-11-29
  • 打赏
  • 举报
回复
read()在读取过程中发生错误返回-1,设置相应的错误码,读取位置无法预期。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧