sizeof()和 strlen()在C语言中都是常用的工具。
sizeof()简要介绍
sizeof是一种操作符,而且是单目操作符,用于计算变量所占内存中的大小,单位是字节。
sizeof返回值size_t ,size_t 是无符号整数类型,即unsigned int。
sizeof()括号里面可以传入数据类型和变量名。
#include<stdio.h>
int main()
{
int a = 10;
printf("%d\n", sizeof(a)); //计算变量
printf("%d\n", sizeof a); //计算变量时,括号可以省略
printf("%d\n", sizeof(int)); //计算类型
return 0;
}
strlen()简要介绍
strlen是C语言库函数,故要包含头文件string.h,功能是求字符串长度。函数原型如下:
size_t strlen(const char *str)
其中const char*char是字符串,size_t是strlen()的返回类型,打印时用%zd打印。
strlen统计的是从strlen函数参数str中这个地址开始向后,\0之前字符串中字符的个数。
strlen函数会一直向后找\0字符,直到找到为止,所以会存在越界查找。
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[3] = { 'a','b','c' };
char arr2[] = "abc";
printf("%zd\n", strlen(arr1)); //因为arr1里面没有\0,只能在arr1后面的内存中找\0故返回值为随机值。
printf("%zd\n", strlen(arr2)); //因为arr2是一个字符数组,而且所占内存空间放置的是a b c \0
printf("%zd\n", sizeof(arr1)); //sizeof计算字符数组所占内存大小,为3个字节
printf("%zd\n", sizeof(arr2)); //sizeof计算的的是a b c \0所占内存的大小,为4个字节
return 0;
}
sizeof()和strlen()对比总结
sizeof | strlen |
1.sizeof 是操作符 2.size计算操作数所占内存的大小,单位是字节。 3.不关注内存中放的什么数据。 | 1.strlen是库函数,使用需要包含头文件string.h 2.strlen是求字符串长度的,统计的是\0之前字符的个数。 3、关注内存中是否有\0,如果没有\0,就会持续向后找,可能会越界。 |