面试题(2)|C/C++基础(2):sizeof与strlen区别

目录

1.功能不同

2.参数不同

3.计算时间不同


1.功能不同

sizeof是操作符,参数为任意类型,主要计算类型占用内存大小。

strlen()是函数,其函数原型为:

extern unsigned int strlen(char *s);

其参数为char*,strlen只能计算以"\0"结尾字符串的长度,计算结果不包括"\0"。

     char* ss="0123456789";
	//s1=4,ss为字符指针在内存中占用4个字节
	int s1=sizeof(ss);
	//s2=10,计算字符串ss的长度
	int s2=strlen(ss);

2.参数不同

当将字符数组作为sizeof()的参数时,计算字符数组占用内存大小;当将字符数组作为strlen()函数,字符数组转化为char*。因为sizeof的参数为任意类型,而strlen()函数参数只能为char*,当参数不是char*必须转换为char*。

char str[]="abced";
     //a为6(1*6),字符数组str包含6个元素(a,b,c,d,e,\0),每个元素占用1个字节
    int a= sizeof(str);
    //len为5,不包含"\0",
    int len=strlen(str);
    //str[0]是字符元素a,所以b=1
    int b= sizeof(str[0]);


当字符数组作为函数参数时,实际上传递的时数组首地址,本质上是指针。因此在函数内部计算形参字符数组的产度是应该使用strlen()而不是sizeof()。

void CTestDlg::OnBnClickedButton1()
{
    char str[]="abced";
    UpperCase(str);
}
void CTestDlg::UpperCase(char str[])
{
    //tes=4,数组作为参数时,传递的是首地址,本质上是一个指针
    int tes=sizeof(str);
    //tes1=5,strlen是计算字符串str的长度
    int tes1=strlen(str);
}


3.计算时间不同

sizeof()在编译的时候计算,因此可以使用sizeof()定义数组的维数;strlen()在运行的时候计算。

 char* szKey[] = { "Mmsi", "Speed","Heading","Latitude","Flag"};
	//c为20(每个char*指针4个字节,总共5个字符串,4*5=20)
	int c = sizeof(szKey);
	//szKey数组每个元素为char *指针,4个字节,所以d=4
	int d=  sizeof(szKey[0]);
	int szlen=strlen(szKey[0]);
	//计算数组元素个数
	int nItem = sizeof(szKey)/sizeof(szKey[0]);
	//使用sizeof定义数组的维数 
	string strParam[sizeof(szKey)/sizeof(szKey[0])];

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

haimianjie2012

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值