《C库 — strlen和sizeof》
1.strlen函数
strlen 函数用来求字符串的长度(包含多少个字符)。
strlen() 函数从字符串的开头位置依次向后计数,直到遇见\0,然后返回计时器的值。最终统计的字符串长度不包括\0。
头文件:string.h 语法/原型: size_t strlen(const char* str);
参数 str 表示要求长度的字符串。
实例:
#include <stdio.h>
#include <string.h>
int main(){
char str[100] = { 0 };
size_t len;
gets(str); //gets() 函数的功能是从输入缓冲区中读取一个字符串存储到字符指针变量 str 所指向的内存空间。
len = strlen(str);
printf("Length: %d\n", len);
return 0;
}
结果:

2.strlen的函数实现(C语言)
#include <stdio.h>
#include <assert.h>
int strlen_new(const char* src)
{
int len = 0;
assert(src);
while(*src++ != '\0')
len ++;
return len;
}
int strlen_new1(const char* str)
{
const char *temp = str;
assert(str);
while(*str ++ !='\0');
/*通过地址长度来取得*/
return str - temp -1;
}
3.sizeof
sizeof是c语言中用来求字节运算符。(注意是运算符不是函数)
作用:求出对象在计算机内存中所占用的字节数。
int main(int argc, char *argv[])
{
char array[10] = {0};
char *s = "zhuangquan";
sizeof(array);
sizeof(s);
}
第一个输出是10,第二个是4(如果用的是32位的系统)。
解释一下为什么数组是10。数组在程序编译阶段就会计算出数组的长度,然后就跟数组名绑定在一起了。
从编译器角度来讲,数组变量也是变量,和普通变量和指针变量并没有本质不同。变量的本质就是一个地址,这个地址在编译器中决定具体数值,具体数值和变量名绑定,变量类型决定这个地址的延续长度(整形4字节、字符型1字节)。
4.sizeof和strlen的区别
strlen计算不包含终止null字节的字符串长度。
sizeof则计算包括终止null字节的缓冲区长度。
两者之间的另一个差别是,使用strlen需进行一次函数调用,而对于sizeof而言,因为缓冲区已用已知字符串进行初始化,其长度是固定的,所以sizeof是在编译时计算缓冲区长度。

输出结果:

浙公网安备 33010602011771号