关于sizeof和strlen的差异
sizeof和strlen的结果类型都是size_t(ize_t的全称应该是size type,就是说一种用来记录大小的数据类型‘)
sizeof和strlen的根本差异在于:
sizeof是操作符,而strlen是一个库函数。
sizeof是计算数据占用内存的大小,单位是字节。
strlen是字符串长度,只能运用于字符串。
sizeof和strlen的运算方式:
sizeof是计算出来了是类型所占空间的字节数,所以以数组名做参数时计算的是整个数组的大小。而strlen是在运行的时候才开始计算结果,这是计算的结果不再是类型所占内存的大小,数组名就退化为指针了。
sizeof是计算内存中占用了多少个字节。
strlen是只能用来计算字符串的长度的,计算\0前面有几个数(不包括\0),\0前面有几个数strlen的结果就有几个数
sizeof和strlen的具体使用
上代码,例子:
char* s = "0123456789"; sizeof(s); //结果 4 ===》s是指向字符串常量的字符指针 sizeof(*s); //结果 1 ===》*s是第一个字符 strlen(s); //结果 10 ===》有10个字符,strlen是个函数内部实现是用一个循环计算到\0为止之前 strlen(*s); //结果 10 ===》错误 char s[] = "0123456789"; sizeof(s); //结果 11 ===》s是数组,计算到\0位置,因此是10+1 strlen(s); //结果 10 ===》有10个字符,strlen是个函数内部实现是用一个循环计算到\0为止之前 sizeof(*s); //结果 1 ===》*s是第一个字符 char s[100] = "0123456789"; sizeof(s); //结果是100 ===》s表示在内存中的大小 100×1 strlen(s); //结果是10 ===》strlen是个函数内部实现是用一个循环计算到\0为止之前 int s[100] = "0123456789"; sizeof(s); //结果 400 ===》s表示再内存中的大小 100×4 strlen(s); //错误 ===》strlen的参数只能是char* 且必须是以‘\0‘结尾的 char q[]="abc"; char p[]="a\n"; 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,'\0','e','f','g'}; sizeof(p); //结果是8 ===》p表示在内存中的大小 8×1 strlen(p); //为一个随机值,结果与编译器有关,不同编译器结果一般不同 sizeof(q); //结果是8 ===》p表示在内存中的大小 8×1 strlen(q); //结果为4 ===》存在'\0',遇到'\0'计算停止。