文件读写问题

write(fd,buf,strlen(buf));  //防止'\0'写入
fgets(fd,buf,sizeof(buf);  //如果buf数组很小,为什么没有把buf中的‘\0’复制。

解释:

strlen()是不计算'\0'的,所以write不会把'\0'也写进去。
fgets()是遇到'\n'刷新一次缓存区,如果缓存区太小,就会写入sizeof(buf)-1个字节,然后补个'\0'表示此次读取结束,但是这一行并没有读完,下次再读的时候还会接着上次的那一行输出。

读到缓存区,缓存区不够大就会有一个'\0'字符串结束,'\0'是不会输出的

strlen()不计算'\0',但是会计算'\n'。这样不会丢失数据了

posted @ 2019-05-06 16:10  莫负年华向东流  阅读(125)  评论(0编辑  收藏  举报