C语言sizeof与strlen的对比

一、sizeof

        sizeof是C语言中的一个单目操作符 ,作用是计算变量所占内存空间大小的,单位是字节,如果操作数是类型的话,计算的是使用类型创建的变量所占空间的大小。

        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语言库函数,功能是求字符串长度,函数原型如下:

size_t strlen ( const char * str );

        统计的是从strlen函数的参数中str这个地址开始向后,统计'\0'之前的字符个数。

        在统计过程中,strlen函数会一直寻找,直到找到'\0'函数后才会停止,故可能会存在越界访问的情形。

#include <stdio.h>
int main()
{
char arr1[3] = {'a', 'b', 'c'};
char arr2[] = "abc";
printf("%d\n", strlen(arr1));
printf("%d\n", strlen(arr2));
printf("%d\n", sizeof(arr1));
printf("%d\n", sizeof(arr2));
return 0;
}

        在上述代码中,我们可以知道在arr1数组中,存放的是'a','b','c',而arr2中存放的是'a','b','c','\0',所程序在运行时,会依次向后遍历并且记下个数直到'\0'的出现。

        所以对于arr2,我们可以明确的知道strlen(arr2)的结果是3。

        但是对于arr1来说,由于不知道'c'后面放的是什么,所以strlen(arr1)是一个随机值。

        除此之外,如果用sizeof分别去计算两个数组的大小,那么运算结果又会是什么呢?从上述代码中我们知道两个数组的类型都是char,其大小为1个字节,所以sizeof所计算出的结果就是用数组里面的元素个数乘以char的大小,得出sizeof(arr1)=3,sizeof(arr2)=4。

三、sizeof与strlen的对比

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值