字符数组的字节与长度的讨论
一、.经常讨论的是字符数组的字节问题了
1)
char str[]={'C','+','+','\0'};
cout<<sizeof(str)<<endl;
char str1[]="C++";
cout<<sizeof(str1)<<endl;//4
//直接赋值的时候,隐藏了"\0"结束符号
2)
char str[]={'C','+','+'};
cout<<sizeof(str)<<endl; //3 实际上有多少字符就是有多少个字节
char str1[]="C++";
cout<<sizeof(str1)<<endl;//4
3)
char str[]={'你','+','+','\0'};
cout<<sizeof(str)<<endl; //4 【在此用'你',虽然汉字超过了两个字节了,但是还是把它看为一个字符,占一位】
char str1[]="你++";
cout<<sizeof(str1)<<endl;//5 【在此用'你',汉字代表两个字节】
二、字符数组的长度问题
strlen的结果要在运行的时候才能计算出来,时用来计算字符串的长度,不是类型占内存的大小【而sizeof相对的是占内存空间大小】
1)
char str[]={'C','+','+','\0'};
cout<<strlen(str)<<endl; //3 数组默认是以"\0",所以实际上最后一个不算入字符长度
char str1[]="C++";
cout<<strlen(str)<<endl;//3
2)
char str[]={'C','+','+'};
cout<<strlen(str)<<endl; //11 这个竟然是11,让我们看看其strlen函数的原型如下:
int strlen(const char *str)
{
ASSERT(str!=NULL);
int len=0;
while(*str++!='\0')
len++;
return len;
}
如果字符串没有结束标志的话,那么strlen函数输出的就是错误的值.
3)
char str[]={'你','+','+','\0'};
cout<<strlen(str)<<endl;//3
char str1[]="你++";
cout<<strlen(str1)<<endl;//4