sizeof是运算符,strlen是函数,后者可以取地址
sizeof在编译时计算,strlen运行时计算
sizeof参数可以是类型,strlen只能用'\0'结尾的char *作参数
sizeof不退化数组参数为指针,strlen退化数组参数为指针
sizeof不关心空间里的内容,只关心空间本身大小,strlen关心空间里的内容('\0'结尾),不关心空间本身
如:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int
main(void)
{
char *ptr;
char buf[20] = "123456";
ptr = buf;
printf("strlen: ptr %ld buf %ld\n", strlen(ptr), strlen(buf));
printf("sizeof: ptr %ld buf %ld\n", sizeof(ptr), sizeof(buf));
exit(0);
}
输出:
strlen: ptr 6 buf 6 //strlen是以'\0'为终止信号,所以他只关心'\0'之前目标的数据量大小,
//不管定义时我给的空间到底多大;strlen返回大小不将'\0'计入
sizeof: ptr 8 buf 20 //sizeof是我定义时所给的空间大小,不关心所给空间里面的数据量大小;
//64位系统,指针大小为8字节