’\0到底写不写

字符数组 ‘\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’)

注:

  1. char a1[]={‘a’,‘b’,‘c’,‘d’}; 这是多个单字符赋值
  2. char a[]=“abcd”;这是字符串赋值;
  3. 对于一个字符串常量,系统会自动在所有字符后面+‘\0’作为结束,再把它储存在字符数组中
  4. 其实对于单个字符赋值,长度=字符个数的时候与为指定大小同样的意思
  5. 由第三条可知,长度=赋值字符个数+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’

猜你喜欢

转载自blog.csdn.net/qq_42146775/article/details/84500920