C语言语言:探究sizeof和strlen的区别

关于sizeof和strlen的差异

sizeof和strlen的结果类型都是size_t(ize_t的全称应该是size type,就是说一种用来记录大小的数据类型‘)

sizeof和strlen的根本差异在于:

sizeof是操作符,而strlen是一个库函数。

sizeof是计算数据占用内存的大小,单位是字节。

strlen是字符串长度,只能运用于字符串。

sizeof和strlen的运算方式:

sizeof是计算出来了是类型所占空间的字节数,所以以数组名做参数时计算的是整个数组的大小。而strlen是在运行的时候才开始计算结果,这是计算的结果不再是类型所占内存的大小,数组名就退化为指针了。

sizeof是计算内存中占用了多少个字节。

strlen是只能用来计算字符串的长度的,计算前面有几个数(不包括),前面有几个数strlen的结果就有几个数

sizeof和strlen的具体使用

上代码,例子:

char* s = "0123456789";
sizeof(s);     //结果 4    ===》s是指向字符串常量的字符指针
sizeof(*s);    //结果 1    ===》*s是第一个字符
strlen(s);     //结果 10   ===》有10个字符,strlen是个函数内部实现是用一个循环计算到为止之前
strlen(*s);     //结果 10   ===》错误


char s[] = "0123456789";
sizeof(s);     //结果 11   ===》s是数组,计算到位置,因此是10+1
strlen(s);     //结果 10   ===》有10个字符,strlen是个函数内部实现是用一个循环计算到为止之前
sizeof(*s);    //结果 1    ===》*s是第一个字符

char s[100] = "0123456789";
sizeof(s);     //结果是100 ===》s表示在内存中的大小 100×1
strlen(s);     //结果是10  ===》strlen是个函数内部实现是用一个循环计算到为止之前

int s[100] = "0123456789";
sizeof(s);     //结果 400  ===》s表示再内存中的大小 100×4
strlen(s);     //错误      ===》strlen的参数只能是char* 且必须是以‘‘结尾的

char q[]="abc";
char p[]="a
";
sizeof(q),sizeof(p),strlen(q),strlen(p);\结果是 4 3 3 2

char p[] = {a,b,c,d,e,f,g,h};
char q[] = {a,b,c,d,,e,f,g};
sizeof(p);     //结果是8 ===》p表示在内存中的大小 8×1
strlen(p);     //为一个随机值,结果与编译器有关,不同编译器结果一般不同
sizeof(q);     //结果是8 ===》p表示在内存中的大小 8×1
strlen(q);     //结果为4 ===》存在,遇到计算停止。

参考与:

经验分享 程序员 微信小程序 职场和发展