字符数组 ‘\0’加不加
‘\0’ 是空字符对应得ASCII是000即null,什么也不做, 不是ASCII对应032空格
组赋值方式 | 加‘\0’方式 | sizeof | strlen | |
---|---|---|---|---|
多个单个字符赋值 | 指定大小 | 1.长度<字符个数 报错 2.长度>字符个数 其余补’\0’ 3.长度=字符个数 不加’\0’ | 指定的数组长度 | 遇第一个’\0’之前(不包括’\0’) |
未指定大小 | 不加‘\0’ | 赋值的数组长度 | 遇第一个’\0’之前(不包括’\0’) | |
字符串常量赋值 | 指定大小 | 1.长度<字符个数+1 报错 2.长度>字符个数+1 字符其余补’\0’ | 指定的数组长度 | 遇第一个’\0’之前(不包括’\0’) |
未指定大小 | 对于一个字符串常量,系统会自动在所有字符后面+‘\0’作为结束,再把它储存在字符数组中 | 赋值的数组长度+1 | 遇第一个’\0’之前(不包括’\0’) |
注:
- char a1[]={‘a’,‘b’,‘c’,‘d’}; 这是多个单字符赋值
- char a[]=“abcd”;这是字符串赋值;
- 对于一个字符串常量,系统会自动在所有字符后面+‘\0’作为结束,再把它储存在字符数组中
- 其实对于单个字符赋值,长度=字符个数的时候与为指定大小同样的意思
- 由第三条可知,长度=赋值字符个数+1,char a[4]=“abcd”; 所以这样会报错 长度短了
#include <iostream> using namespace std; int main() { char a[]="abcd"; char a1[]={'a','b','c','d'}; cout<<sizeof(a)<<" "<<strlen(a)<<endl; cout<<sizeof(a1)<<" "<<strlen(a1)<<endl; }
扩展:
对于string类型(参考谭浩强C++程序设计)
1.是C++已经声明的一个类,在类中的数据成员包含字符指针变量,在其中不是直接存放字符串本身,而是放字符串的起始地址。字符串变量代表该类的对象的起始地址
2.每一个元素只包含字符串本身的字符而不包括‘\0’