| sizeof | strlen | |
|---|---|---|
| 本质 | C语言的一个关键字,也是C语言的一个运算符。 | C语言中的库函数 |
| 使用方法 | sizeof(类型或变量名) | 库函数的原型: size_t strlen(const char *s) |
| 返回内容 | sizeof运算符用来返回一个类型或者是变量所占用的内存字节数。 | 这个函数接收一个字符串的指针,返回这个字符串的长度(以字节为单位)。 注:strlen返回的字符串长度是不包含字符串的‘\0’的。 |
| 作用 | 1、C语言中的原生类型int、double等占用字节数是由平台决定的; 2、C语言中除了ADT外还有UDT,这些用户自定义类型占几个字节无法看出来,可以用sizeof让编译器来告诉我们占多少字节。sizeof是编译器的运算符,调用sizeof后,编译器知道这个类型占字节数,将这个字节数告诉sizeof,由sizeof返回给我们。 | 从字符串的定义(三要素)可以看出无法看出字符串的长度。可以通过strlen计算获得字符串的长度。 |
| 区别 | sizeof(数组名)得到的永远是数组的元素个数(数组的大小),和数组中有无初始化没有关系。 | strlen用来计算字符串长度的,只能传递合法的字符串进去才有意义。 当定义数组没有明确的数组大小,则必须同时给出初始化,编译器会根据初始化去自动计算数组的大小。(数组定义时必须给个数组大小,或者给初始化) |
| sizeof(指针名)如:char *p = "linux"; sizeof ( p ) 得到的永远是4。这时候测的是字符指针p本身的长度,和字符串的长度是无关的。 | strlen(指针名)如:char *p = "linux"; strlen( p ) strlen用来计算字符串的长度。 | |
| 例子 | char str[] = "hello"; sizeof(str)=6 sizeof(str[0])=1 | char str[] = "hello"; strlen(str)=5 |
| char str[] = "hello";char *p=str; sizeof(p)=4 sizeof(*p)=1 | char str[] = "hello";char *p=str; strlen(p)=5 | |
| int n=10; sizeof(int)=4 sizeof(n)=4 | ||
| int b[100]; sizeof(b)=400 // 100*sizeof(int) |