【C/C++】sizeof和strlen的一些比较

1.sizeof求的是数据类型所占空间的大小(不受其中存储内容的影响),而strlen是求字符串的长度。

2.sizeof的参数可以是变量也可以是数据类型,strlen的参数只能是以"\0"结尾的字符串。

3.编译器在编译的时候就计算出了sizeof的大小,而strlen只有在程序运行期间才能计算出字符串长度。

4.在子函数中,ziseof 会把从主函数中传进来的字符数组当作是指针来处理。

例如:

#include<stdio.h>
#include<string.h>
void main()
{
	char str[]="hello";
	char str2[20]="hello";
	char *str3="hello";
	char str4[]={'h','e','l','l','o','\0'};
	char str5[]={'h','e','l','l','o'};

	printf("sizeof:%d strlen:%d\n",sizeof(str),strlen(str));	//6	5
	printf("sizeof:%d strlen:%d\n",sizeof(str2),strlen(str2));	//20    5
	printf("sizeof:%d strlen:%d\n",sizeof(str3),strlen(str3));	//4	5
	printf("sizeof:%d strlen:%d\n",sizeof(str4),strlen(str4));	//6     5
	printf("sizeof:%d strlen:%d\n",sizeof(str5),strlen(str5));	//5	不确定的数
}

说明:

str[]="hello":

因为strlen测量的是字符串的长度,以遇到的第一个'\0'为结束标志,所以strlen(str)=5;而对sizeof来说,‘\0’也占用一个字节,所以sizeof(str)=6。

char str2[20]="hello":

因为strlen测量的是字符串的长度,以遇到的第一个'\0'为结束标志,所以strlen(str2)=5;sizeof计算的是分配的数组str2[20]所占空间的大小,不受存储内容的影响,sizeof(str2)=20。

char *str3="hello":

sizeof(str3)返回指针大小,在32位系统下指针大小为4字节,因此sizeof(str3)=4。

char str4[]={'h','e','l','l','o','\0'}
和char str5[]={'h','e','l','l','o'}:

我们知道字符串是以 '\0' 为结束标志的,所以char str[ ] = "hello" 等效于char str4[ ] = {'h' , 'e' , 'l' , 'l' , 'o' , '\0'} 。strlen函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从首地址一直找下去,直到遇到'\0'停止。而如果不在字符数组初始化的时候加上'\0',那么strlen得到的值就不是正确的数值,打印出来的结果也不是想要的结果。因此我们要避免这种情况,在初始化的时候要记得加上'\0',或者一次性赋初值。

 

现在注意这一句:在子函数中,ziseof 会把从主函数中传进来的字符数组当作是指针来处理。

而指针的大小又是取决于机器,而非人为决定的。看下面这个例子:

#include<stdio.h>
#include<string.h>
void size_of(char str[])
{    
	printf("sizeof:%d\n", sizeof(str));
} 
void main()
{
	char str[20] = "hello";     
	size_of(str);     
}

这个例子输出结果为:sizeof:4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值