整体看一个代码的效果
#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{
int a[8]={1,2,3};
char b[]="love";
printf("%ld\n",sizeof(a));
printf("%ld\n",sizeof(b));
printf("%ld\n",strlen(b));
return 0;
}
输出结果为:
32
5
4
通过上述代码可以看出,
第一个printf得出sizeof求的是数组实际所占的内存的字节数,因为是int类型的,每个int 4个字节,8个元素,所以为32.
第二个printf得出,sizeof求的是数组实际所占的内存的字节数,算上字符串结束符’\0‘
第三个printf可以看出,strlen求出的是字符串的实际长度
-
总结:
1、strlen计算字符串的具体长度(只能是字符串),不包括字符串结束符。返回的是字符个数。2、sizeof计算声明后所占的内存数(字节大小),不是实际长度。
3、sizeof是一个取字节运算符,而strlen是个函数。
4、sizeof的返回值=字符个数*字符所占的字节数,字符实际长度小于定义的长度,此时字符个数就等于定义的长度。若未给出定义的大小,分类讨论,对于字符串数组,字符大 小等于实际的字符个数+1;对于整型数组,字符个数为实际的字符个数。字符串每个字符占1个字节,整型数据每个字符占的字节数需根据系统的位数类确定,32位占4个字节。
sizeof
- 判断数据类型长度符的关键字
用法
sizeof (类型说明符)
sizeof 表达式
定义
sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。
strlen
strlen(char*)函数求的是字符串的实际长度,直到遇到第一个’\0’,然后就返回计数值,且不包括’\0’。