读书人

字符数组的字节与长度的议论

发布时间: 2012-09-06 10:37:01 作者: rapoo

字符数组的字节与长度的讨论

一、.经常讨论的是字符数组的字节问题了

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

读书人网 >编程

热点推荐