LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 781|回复: 3

关于字符数组和字符串

[复制链接]
发表于 2008-12-2 13:16:15 | 显示全部楼层 |阅读模式
假如一个字符串常量为“hello”,那么在计算机里面存储的时候编译器会自动在后面加一个‘\0’,也就是说编译器会为它分配6个字节的存储空间,
对于一个字符数组加入没有指定它的长度,那么char a[]=“hello”将也是分配6个字节的存储空间,那么如果分配了长度的数组 char a[5]="hello",那么编译器在解释这一句的时候是不是也会在后面自动加上一个字节用来存储'\0',但是在用sizeof求它的分配空间的大小的时候仍然是5个字节,如果没有加的话,那么如果我用下面一段程序来求字符数组的长度的长度的时候:
int str_len(char s[])
  {   
      int i = 0;
      while(*s++!='\0')
           i++;
     return i;
}
岂不是最后没有‘\0’来表示结束了,除非在接下来的内存里有一个'\0'才能判断它结束么?
发表于 2008-12-2 19:23:45 | 显示全部楼层
楼主仔细考虑一下以下语句的区别:
char * a;
char * a = "sss";
char a[] = "sss";
char a[10] = "sss";
char a[10];

然后还要再想一想, "sss" 究竟是什么意思
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-12-3 11:51:02 | 显示全部楼层
char a[5]="hello"这种定义方式一般我们不建议采用,这样是不能判断它什么时候结束的,在给字符数组赋值的时候一般我们会手动得在后面加一个‘\0’,应该这样定义char a[6]="hello"
回复 支持 反对

使用道具 举报

发表于 2008-12-3 15:12:57 | 显示全部楼层
如果自己给字符串分配空间,确实是要多分配一个字节给'\0'的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表