《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是在编译时计算缓冲区长度。
输出结果: