为了账号安全,请及时绑定邮箱和手机立即绑定

请教以下代码中的两个sizeof用法有问题吗?如果有的话,是什么问题呢?

请教以下代码中的两个sizeof用法有问题吗?如果有的话,是什么问题呢?

C
胡说叔叔 2023-04-22 18:14:39
void UpperCase( char str[] ) // 将 str 中的小写字母转换成大写字母{for( size_t i=0; i<sizeof(str)/sizeof(str[0]); ++i )if( 'a'<=str[i] && str[i]<='z' )str[i] -= ('a'-'A' );}char str[] = "aBcDe";cout << "str字符长度为: " << sizeof(str)/sizeof(str[0]) << endl;UpperCase( str );cout << str << endl;
查看完整描述

2 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

参数char str[] 等同于 char *str;而str表示指向头元素的指针,而C/C++语言中把指针是看成一个是对地址的编码。在32位的系统中,这个编码是用一个32位的整数来表示的,也就是说如果你用sizeof(str)计算这个数组的长度就相当于sizeof(int)一个,其结果是4。如果你的目的是要表示这个数组的长度就得使用strlen(str)/sizeof(str[0]);strlen(str)表示的是str真是表量的长度。

查看完整回答
反对 回复 2023-04-25
?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

strlen(char*)函数求的是字符串的实际长度,而sizeof()函数返回的是变量声明后所占的内存数,不是实际长度,此外sizeof不是函数,仅仅是一个操作符,strlen是函数。

查看完整回答
反对 回复 2023-04-25
  • 2 回答
  • 0 关注
  • 85 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信