sizeof 和strlen的区别
2013-07-17 08:25
267 查看
第一个例子:
char *ss="0123456789";
sizeof(ss)=4,ss是指向字符串常量的字符指针。
sizeof(*ss)=1,*ss是第一个字符。
第二个例子: char ss[]="0123456789";
sizeof(ss)=11, ss是数组,计算到“\0”位置,因此是(10+1)。
sizeof(*ss)=1,*ss是第一个字符。
第三个例子: char ss[100]="0123456789";
sizeof(ss)=100, ss表示在内存中预分配的大小,100*1。
strlen(ss)=10,它的内部是用一个循环计算字符串的长度,直到“\0”为止。
第四个例子: int ss[100]="0123456789";
sizeof(ss)=400,ss表示在内存中的大小,100*4。
strlen(ss)错误,strlen的参数只能是char*,且必须是以“\0”结尾的。
对函数实用sizeof,在编译阶段会被函数返回值的类型取代。
如:int f1() { return 0;}
cout<<sizeof(f1())<<endl; //f1()返回值为int,因此被认为是int。 为4.
sizeof和strlen有以下区别:
sizeof是一个操作符,strlen是库函数。
sizeof的参数可以是数据的类型,也可以是变量,而strlen只能以结尾为‘\0’的字符串作参数。
编译器在编译时就计算出了sizeof的结果,而strlen函数必须在运行时才能计算出来。并且sizeof计算的是数据类型占内存的大小,而strlen计算的是字符串实际的长度。
数组做sizeof的参数不退化,传递给strlen就退化为指针了。
《c++ primer》P115
[cpp] view plaincopy char ca[] = {'C' , '+' , '+'}; //not null-terminated
cout<<strlen(ca)<<endl;
在这个例题中,ca是一个没有null结束符的字符数组,则计算的结果不可预料。
标准库函数strlen总是假定其参数字符串以null字符结束,当调用标准库函数时,系统将会从实参ca指向的内存空间开始一直搜索结束符,直到恰好遇到null为止。
strlen返回这一段内存空间中总共有多少个字符,无论如何这个数值不可能是正确的。
char *ss="0123456789";
sizeof(ss)=4,ss是指向字符串常量的字符指针。
sizeof(*ss)=1,*ss是第一个字符。
第二个例子: char ss[]="0123456789";
sizeof(ss)=11, ss是数组,计算到“\0”位置,因此是(10+1)。
sizeof(*ss)=1,*ss是第一个字符。
第三个例子: char ss[100]="0123456789";
sizeof(ss)=100, ss表示在内存中预分配的大小,100*1。
strlen(ss)=10,它的内部是用一个循环计算字符串的长度,直到“\0”为止。
第四个例子: int ss[100]="0123456789";
sizeof(ss)=400,ss表示在内存中的大小,100*4。
strlen(ss)错误,strlen的参数只能是char*,且必须是以“\0”结尾的。
对函数实用sizeof,在编译阶段会被函数返回值的类型取代。
如:int f1() { return 0;}
cout<<sizeof(f1())<<endl; //f1()返回值为int,因此被认为是int。 为4.
sizeof和strlen有以下区别:
sizeof是一个操作符,strlen是库函数。
sizeof的参数可以是数据的类型,也可以是变量,而strlen只能以结尾为‘\0’的字符串作参数。
编译器在编译时就计算出了sizeof的结果,而strlen函数必须在运行时才能计算出来。并且sizeof计算的是数据类型占内存的大小,而strlen计算的是字符串实际的长度。
数组做sizeof的参数不退化,传递给strlen就退化为指针了。
《c++ primer》P115
[cpp] view plaincopy char ca[] = {'C' , '+' , '+'}; //not null-terminated
cout<<strlen(ca)<<endl;
在这个例题中,ca是一个没有null结束符的字符数组,则计算的结果不可预料。
标准库函数strlen总是假定其参数字符串以null字符结束,当调用标准库函数时,系统将会从实参ca指向的内存空间开始一直搜索结束符,直到恰好遇到null为止。
strlen返回这一段内存空间中总共有多少个字符,无论如何这个数值不可能是正确的。
相关文章推荐
- Sizeof与Strlen的区别与联系
- C语言中关于sizeof 和 strlen的区别分析
- Sizeof与Strlen的区别与联系
- Sizeof与Strlen的区别
- strcpy,strlen, strcat, strcmp函数,strlen函数和sizeof的区别
- sizeof 跟 strlen 的区别
- C语言 sizeof 与 strlen 的区别与联系
- strlen和sizeof的区别(续一)
- Sizeof与Strlen的区别与联系
- sizeof() 与 strlen()区别与联系
- strlen与sizeof区别(转载)
- sizeof和strlen的区别比较
- 【C++基础】sizeof 与 strlen的区别
- strlen和sizeof的区别
- sizeof && strlen 的区别
- C++开发面试题:sizeof与strlen区别
- char字符串数组与string之间的转换,以及sizeof,strlen,length的区别
- sizeof和strlen区别与不同
- C小知识点:sizeof和strlen区别与联系
- Sizeof与Strlen的区别与联系