字符串的sizeof长度及strlen长度
在C/C++中,字符串是以零('\0')结尾的。⽐如,对于下⾯的字符串:
"hello"
在最后⼀个字符'd'后⾯,还有⼀个我们⾁眼看不见的'\0'字符,作为该字符串的结束符。所以,"Hello"其在内存中的存储形式为:'H' 'e' 'l' 'l' 'o' '\0'
最后有⼀个我们看不见的'\0'。明⽩了字符串的结尾⽅式,那么如何计算字符串的长度呢?⽐如:
例题1:
char str1[]="12345678";
char str2[]={'1','2','3','4','5','6','7','8'};
char str3[]={'1','2','3','\0','5','6','7','8'};
sizeof(str1)=?
sizeof(str2)=?
sizeof(str3)=?
strlen(str1)=?
strlen(str2)=?
strlen(str3)=?
分析:
str1是⼀个字符数组,由字符串"12345678"进⾏初始化。由于"12345678"含有⼀个结尾字符'\0',所以str1数组共有9个字符。因此sizeof(str1)=9。
str2也是⼀个字符数组,它的长度由'1','2','3','4','5','6','7','8'8个字符初始化,并没有指明零字符。因此sizeof(str2)=8。
str3同样由8个字符初始化,因此sizeof(str3)=8。
strlen函数只计算字符串中不含零的字符个数。因此:strlen(str1)=8。
⽽由于str2中最后⼀个字符不包含零,所以,str2不是⼀个有效的字符串,因此strlen(str2)不确定。
⽽对于字符数组str3,在第4个字符为'\0',所以作为⼀个字符串,在此处结尾。所以strlen(str3)=3。
答案:
sizeof(str1)=9
sizeof(str2)=8
sizeof(str3)=8
strlen(str1)=8
strlen(str2)=⽆结束字符0,所以字符串溢出,不确定
strlen(str3)=3
例题2:实现strlen⽅法。
分析:既然字符串是以'\0'结尾的,那么实现strlen也就很简单了,直接从左往右遍历字符串,遇到'\0'就退出。
size_t strlen (const char * str)
{
const char *eos = str;
字符串长度的正确表示while( *eos++ )
;
return( eos - str - 1 );
}
那么,有没有不是以零结尾的字符串表⽰⽅法呢?实际上是有的。⽐如:UNICODE_STRING, ANSI_STRING。
这两种类型的字符串表⽰⽅法,就不是以零结尾的了,⽽是以⾸地址和有效长度来定义字符串。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。