c中的sizeof函数?

以下代码中的两个sizeof用法有问题吗?如果有的话,是什么问题呢?
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;

一只名叫tom的猫
浏览 987回答 2
2回答

炎炎设计

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

素胚勾勒不出你

strlen(char*)函数求的是字符串的实际长度,而sizeof()函数返回的是变量声明后所占的内存数,不是实际长度,此外sizeof不是函数,仅仅是一个操作符,strlen是函数。
打开App,查看更多内容
随时随地看视频慕课网APP