C-风格(c-style string)字符串
C-风格字符串的结尾标定
char dog[8] = { 'b', 'e', 'a', 'u', 'x','I','I', 'I'};
// not a string!
char cat[8] = {'f', 'a', 't', 'e', 's','I', 'a', '\0'};
// a string!
上面dog不是 字符串,而cat才是字符串,关于这些知识点,我总结如下
- 只有含有’\0’空字符在末尾的char数组才能被算作字符串
- \0的ASCLL码为0。用来标记字符串的结尾
- 一般打印字符串的函数在打印字符串时,遇到’\0’时才会停止打印,如dog这个char数组,在打印完’I’后不会停止,直到遇到’\0’才停止。
- '\0’也算作数组的一位,cat只会打印出7个字符,但是数组长度为8
c-风格字符串的初始化
char cat[8] = {'f', 'a', 't', 'e', 's','I', 'a', '\0'};
char cat[]="fatesIa";
char cat[8]="fatesIa";
char boss[8]="Boze";
上面四个都可以初始化成功,前面三个表达的是同一个字符串,现在主要来说一下第四个。
第四个char数组的长度为8,但是只有5个字符,Boze+\0,那么剩下的位置是什么呢?答案是都补上\0,如下图所示。
c-风格 字符串常量和字符常量的关系
char shirt_size='S';//合法的语句
char shirt_size="S";//不合法的语句
这个问题的本质就是,在c语言中单引号''
和双引号""
的区别,下面我们来讲解一下这个区别。
'S'
表示的是字符常量,在ASCLL系统中'S'
是83的另外一种写法,对于第一个语句,你可以把它等价于下述语句,下面这两个语句在ASCLL系统中是等价的。char shirt_size=83; char shirt_size='S'
""
表示的是字符串常量"S"
表示的是字符S和\0组成的字符串,且"S"
表示的是字符串所在的内存地址。