原创 sizeof()与strlen()的区别

2008-3-7 10:40 2640 3 3 分类: MCU/ 嵌入式

1.sizeof是算符,strlen是函数。


2.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的。


sizeof还可以用函数做参数,比如:
short f();
printf("%d\n", sizeof(f()));
输出的结果是sizeof(short),即2


strlen()是返回字符个数,且,这个个数应该是遇到null或'\0'之前的字符个数。


我们来测试:

#include <iostream.h>
#include <string.h>

void main ()
{   
  char a[5] ;
 a[0]='a';
 a[1]='c';
 a[2]='\0';
 a[3]='a';
 a[4]='b';
 cout <<sizeof(a)<<endl;
 cout<<strlen(a)<<endl;
 cout <<sizeof("abc")<<endl;
 cout <<strlen("abc\0d")<<endl;
}

结果为

5

2

4

3

3.大部分编译程序 在编译的时候就把sizeof计算过了 是类型或是变量的长度这就是sizeof(x)可以用来定义数组维数的原因
char str[20]="0123456789";
int a="strlen"(str); //a=10;
int b="sizeof"(str); //而b=20;


上面是对静态数组处理的结果,如果是对指针,结果就不一样了


char* ss = "0123456789";
sizeof(ss) 结果 4 ===》ss是指向字符串常量的字符指针,sizeof 获得的是一个指针的之所占的空间,应该是长整型的,所以是4
sizeof(*ss) 结果 1 ===》*ss是第一个字符 其实就是获得了字符串的第一位'0' 所占的内存空间,是char类型的,占了 1 位


strlen(ss)= 10 >>>> 如果要获得这个字符串的长度,则一定要使用 strlen


4.strlen的结果要在运行的时候才能计算出来,时用来计算字符串的长度,不是类型占内存的大小。


5.sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。这是因为sizeof是个操作符不是个函数。


 


 


 



 


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
3
关闭 站长推荐上一条 /3 下一条