1.char型数组的字符串在初始化为字符串常量或者后续赋值时
(1) 没有声明数组的元素个数
如 char str[ ] = “优快云”;
此时编译器会自动在字符‘N’后添加一个空字符’\0’以表示结尾
因此数组的长度是5个字节
(2) 声明时确定了元素个数
char str2[8] = “优快云” ;
此时只对前4个char型元素进行了赋值,第五个元素由空值字符 ’\0 自动加到结尾,同时其余3个元素设置为\0,如下表:
|
C |
S |
D |
N |
\0 |
\0 |
\0 |
\0 |
|
[0] |
[1] |
[2] |
[3] |
[4] |
[5] |
[6] |
[7] |
同时应注意:当明确了char型数组的元素个数时,初始化数组或后续对数组进行赋值时,别忘了将结尾的空字符需要占一个元素计算在内,不然会发生数组界限溢出。
如:char str3[8] = “优快云PRO” ; // valid
char str4[8] = “优快云PLUS”; // invalid error:“str4”: 数组界限溢出
2.区分对char型数组使用函数strlen() 和sizeof()的返回值 (注意sizeof不是函数)

由于数组在结尾会自动添加一个 ‘\0’ 字符以表示结尾,且char型元素占8位(1个字节),该数组的长度(大小)即为5个字节,所以使用sizeof(str)时返回的是5。
而使用strlen(str)函数时返回的值该字符串的实际字符长度,结尾自动添加的空字符不计算在内,因此长度为4个字符(不是字节)。
3.使用cin流对象 对char型数组进行键盘输入时
(1)输入一个字符串:
char str[20];
cin >> str; // str = "abcdefg"
cout << str; // show: abcdefg
(2)输入一行字符串时:
char str2[20];
cin >> str2; // str2 = "abcd efg"
cout << str2; //show:abcd

原因:char型数组的字符串以 '\0' 表示结尾,因此cin使用空白(空格)来确定字符串的结束位置,在对str2进行赋值时,在cin中abcd后的空格符导致之后的efg没有输入到数组str2中。
解决方法:通过cin对象调用类当中类成员函数getline(用来存储该输入行的数组名称,读取的字符数)或者get(参数同理)

4.区分单引号和双引号的使用
char s1 = 'C'; // valid
char s2 = "C"; // invalid
单引号表示的是一个字符常量,是字符串编码的简写。在ASCII系统上,'C'只是67的另一种写法,因此第一条语句将67赋值给s1。
双引号表示的是一个字符串常量,表示的是 两个字符 'C' 和 '\0' 组成的一个字符串,因此将其赋值给char类型的s2是不合法的。
本文详细介绍了C++中char型数组在初始化字符串常量时的两种情况,包括未声明元素个数和已声明元素个数,并强调了数组界限和空字符的重要性。此外,还讲解了strlen()与sizeof()的区别以及cin流对象对char型数组输入时的注意事项。最后,提到了单引号和双引号在赋值时的区别。
1189

被折叠的 条评论
为什么被折叠?



