【几个例子】
char* ss = "0123456789";
char* ss = "0123456789";
sizeof(ss) //4, ss
是指向字符串常量的字符指针
strlen(ss) //10,
只能用它获得这个字符串的长度
char ss[] = "0123456789";
sizeof(ss) //11, ss
是数组,计算到
‘/0’
位置,因此是
10
+
1
strlen(ss) //10, strlen
是个函数内部实现是用一个循环计算到
/0
为止之前
char ss[100] = "0123456789";
sizeof(ss) //100, ss
表示在内存中的大小
100×1
strlen(ss) //10, strlen
是个函数内部实现是用一个循环计算到
/0
为止之前
int ss[100] = "0123456789";
sizeof(ss) //400, ss
表示再内存中的大小
100×4
strlen(ss) //
错误
, strlen
的参数只能是
char*
且必须是以
‘/0‘
结尾
【
sizeof
与
strlen
区别总结】
1.sizeof
是运算符,
strlen
是函数。
2. strlen
是有效字符串的长度,不包含
‘/0’
,与初始化有关系,而
sizeof
与初不初始化没有关系
3.sizeof
可以用类型做参数,用来计算类型占内存大小,
strlen
只能用
char*
做参数,且必须是以
'
/0'
结尾的,用来计算字符串的长度;//
strlen形参必须是字符指针类型
4.
数组做
sizeof
的参数不退化,传递给
strlen
就退化为指针了。//
作为指针传递给strlen函数
5. sizeof
在编译时计算,而
strlen
的结果在运行时才能计算出来,//
还是用sizeof好 = =