- sizeof是一个操作符,strlen是函数
- sizeof在编译期间计算(不能返回动态分配内存大小),strlen在运行时计算
- sizeof参数可以是变量、数据类型
- strlen参数必须是以“\0”结尾的字符串【char*类型
- strlen中数组名作为参数时退化成指针,而sizeof不退化
观察:
#include <stdio.h>
#include <string.h>
int main()
{
char str[] = "Hello world";
printf("sizeof(str)=%d\n", sizeof(str));
printf("strlen(str)=%d\n", strlen(str));
char* p = str;
printf("sizeof(p)=%d\n", sizeof(p));
printf("strlen(p)=%d\n", strlen(p));
return 0;
}
输出结果如下:
我们知道字符串以“\0”结尾,sizeof计算内存大小时算上了这一结束符,而strlen返回的长度不包含结束符
对strlen而言,str(退化为指针)、p为指针,是char*类型计算结果为字符串长【不含结束符】
sizeof计算p指针长度:这里运行环境是Windoes64位系统,指针长为4字节
Windoes32位、64位、Ubuntu32位:指针长4字节
Ubuntu64位:指针长8字节