一、sizeof
sizeof是运算符(编译器控制,内部),求一个变量、容器占多少空间。
就像在池塘里找东西,有啥算啥。
二、strlen
strlen是函数(不受编译器控制,第三方控制,灵活)查看字符串(必须是字符串)长度,与内容无关。
就像在池塘里找鱼,只算鱼的数量,其余不算。
例题:
-
char *p = “hello”;
sizeof§ = 4, strlen§ = 5;
sizeof:因为p是个指针,32位系统里占4个字节
strlen: 因为strlen查看的是是p中字符的个数 -
char a[ ] = “hello”;
sizeof(a) = 6,strlen(a) = 5;
sizeof:因为a是个数组,数组中有6个元素(包含\0);
strlen: 因为数组中有5个字符(不算\0); -
char a[2] = {‘a’, ‘b’};
sizeof(a) = 2 , strlen(a)未知,因为不知道\0在哪,属于内存越界,错误的 -
char a[3] = {‘a’, ‘b’};
sizeof(a) = 3, strlen(a) = 2;
sizeof算\0;
a[3] = {‘a’, ‘b’} 时 {‘a’, ‘b’, 0}自动补0,且0等价于\0,所以strlen就可以停止了