首页新闻找找看学习计划

linux中read系统调用buffer的长度问题

0
[待解决问题]
 1 #include <sys/types.h>
 2 #include <sys/stat.h>
 3 #include <fcntl.h>
 4 #include <stdlib.h>
 5 #include <stdio.h>
 6 #include <unistd.h>
 7 #include <string.h>
 8 
 9 int main(int argc, char *argv[]) {
10 
11 #define MAX_READ 20
12 #define BUF_LEN 10
13         char buffer[5];
14 
15         /* read something */
16         if(read(STDIN_FILENO, buffer,MAX_READ) == -1) {
17                 printf("read file error!\n");
18                 exit(1);
19         }
20 
21         printf("The input data was: %s\n", buffer);
22         printf("%c\n", buffer[BUF_LEN-1]);
23         return 0;
24 }

这段代码中buffer的长度是5,但是最后打印出来buffer的长度不止5,是怎么回事呢?我原以为read出来了之后,只有最开始的4个字节存入到buffer中,然后buffer[4]就是'\0'了,但事实不是这样,有人解答一下么?

tuhooo的主页 tuhooo | 初学一级 | 园豆:122
提问于:2018-03-24 16:41
< >
分享
所有回答(1)
0

1 定义时 char buffer[MAX_READ+1] ={0};

长度和你读出的MAX_READ需要匹配,否则会栈溢出,另外要初始化

2 printf("%d\n", strlen(buffer)); 

看读出的长度

2012 | 园豆:19088 (专家六级) | 2018-03-24 16:59

多谢,那我char buffer[5];这样定义是啥意思,不是声明了一个长度为5的char类型数组么?

但是似乎这样写还没发现问题?

支持(0) 反对(0) tuhooo | 园豆:122 (初学一级) | 2018-03-24 20:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册