1概述

如果使用char[]来声明char数组,那么编译器会自动计算后面的字面量字符数,再加上一个空字符,作为它的长度。实际上这个数组最后一位被编译器强行加上了\0:

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h> #define BUFFSIZE 4096 int main(void)
{
int fd_1 = open("./test_1.txt", O_RDWR);
//为了改变fd_1的偏移值,输出一下fd_1的内容
char str[BUFFSIZE];
ssize_t n;
//往test_1.txt写入一些信息
char str_2[] = "|append";
n = write(fd_1, str_2, sizeof(str_2)); //最终的输出结果是"|append\0",在文本中,\0被当成了空格去显示
lseek(fd_1, , SEEK_SET);
while((n = read(fd_1, str, BUFFSIZE)) > ){
printf("%s\n", str);
}
}

给数组加上长度,就可以解决上述"问题":

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h> #define BUFFSIZE 4096 int main(void)
{
int fd_1 = open("./test_1.txt", O_RDWR);
//为了改变fd_1的偏移值,输出一下fd_1的内容
char str[BUFFSIZE];
ssize_t n;
//往test_1.txt写入一些信息
char str_2[] = "|append";
n = write(fd_1, str_2, sizeof(str_2)); //最终的输出结果是"|append"
lseek(fd_1, , SEEK_SET);
while((n = read(fd_1, str, BUFFSIZE)) > ){
printf("%s\n", str);
}
}

自行给未定义长度的字符串数组加\0的后果是sizeof计算字符长度的时候永远是字符个数+1,即导致"|append\0"会被计算为长度9:

#include <stdio.h>

int main(void)
{
char str_2[] = "|append\0";
printf("%d\n", sizeof(str_2));//输出9
}

并且在写入文件的时候,写入\0会被当作空格键解析,所以代码1的示例如果改为自行添加\0,会导致写入文件的文本后面有两个空格:

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h> #define BUFFSIZE 4096 int main(void)
{
int fd_1 = open("./test_1.txt", O_RDWR);
//为了改变fd_1的偏移值,输出一下fd_1的内容
char str[BUFFSIZE];
ssize_t n;
//往test_1.txt写入一些信息
char str_2[] = "|append\0";
n = write(fd_1, str_2, sizeof(str_2)); //最终的输出结果是"|append"
lseek(fd_1, , SEEK_SET);
while((n = read(fd_1, str, BUFFSIZE)) > ){
printf("%s\n", str);
}
}

最新文章

  1. Bootstrap&lt;基础十四&gt; 按钮下拉菜单
  2. java后端书籍推荐
  3. day17算法
  4. 对.NET跨平台的随想
  5. Struts2:java.lang.NoSuchFieldException: resourceEntries at java.lang.Class.getDeclaredField(Class.java:1901)
  6. PL/SQL Developer使用技巧、快捷键
  7. 【HTML】Beginner2:page title
  8. Activiti 5.18 流程Model 转成 流程BPMN文件
  9. IOS网络请求中文转码
  10. 常用几种Java Web容器
  11. spring,hibernate配置事务
  12. springboot+mybatis+pagehelper
  13. Centos下配置php环境
  14. jenkins实战(二):构建自由风格的maven项目
  15. postgresql远程连接中断的处理
  16. CentOS-6.4 安装 PHP Memcached 扩展
  17. Python3.X如何下载安装urllib2包 ?
  18. Linux中的yum是什么?如何配置?如何使用?
  19. SSH 远程端口转发
  20. (转)Inno Setup入门(十一)——完成安装后执行某些程序

热门文章

  1. 通过ansible自动化部署zabbix应用
  2. [golang] nats的消息传递模型介绍
  3. js方法中参数传过来的值包含括号
  4. Java基础部分知识点(初稿)
  5. SpringCloud之Spring Cloud Stream:消息驱动
  6. 【MySQL】LIMIT以及LIMIT OFFSET
  7. Ubuntu18.04搭建测试环境
  8. 可编程实验板EPM1270T144C5使用说明
  9. Jmeter+Ant+Jenkins集成抛出异常java.lang.ClassNotFoundException: javax.mail.internet.MimeMessage
  10. 三个月前的评测拖延三个月仍旧是拳王No.1吗?YES!