sizeof和strlen()
sizeof和strlen()都可以用来统计字符串所占用的大小,二者的区别为:
- sizeof是运算符,而strlen是函数;
- strlen必须以char *作为参数,且必须以’\0’结尾;而sizeof()可以用于其他类型;
- strlen统计字符串中字符的长度,不包括结尾的’\0’;
- 数组做sizeof的参数不退化,而传递给strlen就变为指针;
例题
下面程序的输出结果为多少?
void Func(char str_arg[100])
{
printf("%d\n", sizeof(str_arg));
}
int main(void){
char str[] = "Hello";
printf("%d\n", sizeof(str));
printf("%d\n", strlen(str));
char *p = str;
printf("%d\n", sizeof(p));
Func(str);
}
答案:6 5 4 4
解析:对字符串进行sizeof 操作的时候,会把字符串的结束符“\0”计算进去的,进行strlen 操作求字符串的长度的时候,不计算\0 的。
sizeof§:计算的是指针的长度,32位机器上为4B 。
—————————————————————————————
补充:
当参数分别如下时,sizeof返回的值表示的含义如下:
数组——编译时分配的数组空间大小;
指针——存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,一般为4);
类型——该类型所占的空间大小;
对象——对象的实际占用空间大小;
函数——函数的返回类型所占的空间大小。函数的返回类型不能是void。