每日一题(39)—— sizeof


以下代码中的两个sizeof用法有问题吗?

void UpperCase(char str[])
{
    for(size_t i = 0; i < sizeof(str)/sizeof(str[0]); ++i)
    {
        str[i] -= ('a' - 'A');
    }
}

char str[] = "aBcDe";
cout << "str字符长度为: " << sizeof(str)/sizeof(str[0]) << endl;

UpperCase(str);
cout << str << endl;






      函数内的sizeof有问题。根据语法,sizeof如用于数组,只能测出静态数组的大小,无法检测动态分配的或外部数组大小。函数外的str是一个静态定义的数组,因此其大小为6,函数内的str实际只是一个指向字符串的指针,没有任何额外的与数组相关的信息,因此sizeof作用于上只将其当指针看,一个指针为4个字节,因此返回4。







在C++,获取字符串的长度可以使用以下四种方法: 1. `sizeof()`函数 在C++,`sizeof()`函数用于获取数据类型或变量所占用的内存大小,单位为字节。因此,可以使用`sizeof()`函数来获取字符串的长度,即字符串所占用的内存大小,包括字符串末尾的空字符(&#39;\0&#39;)。例如: ```c++ char str[] = "Hello"; int len = sizeof(str) / sizeof(char); // len = 6 ``` 需要注意的是,`sizeof()`函数返回的是编译时确定的值,因此对于动态分配的字符串,这种方法并不适用。 2. `size()`函数 在C++,`size()`函数用于获取STL容器(如`string`)的大小,即容器元素的个数。对于字符串,可以使用`size()`函数来获取其长度。例如: ```c++ string str = "Hello"; int len = str.size(); // len = 5 ``` 需要注意的是,`size()`函数返回的是容器元素的个数,对于字符串来说,即字符串的长度。但是,`size()`函数并不包括字符串末尾的空字符(&#39;\0&#39;)。 3. `strlen()`函数 在C++,`strlen()`函数用于获取C风格字符串的长度,即以空字符(&#39;\0&#39;)结尾的字符数组的长度。对于字符串,可以使用`strlen()`函数来获取其长度。例如: ```c++ char str[] = "Hello"; int len = strlen(str); // len = 5 ``` 需要注意的是,`strlen()`函数并不包括字符串末尾的空字符(&#39;\0&#39;)。 4. `length()`函数 在C++,`length()`函数是`string`类的成员函数,用于获取字符串的长度。与`size()`函数功能类似,`length()`函数返回的是字符串的长度,不包括字符串末尾的空字符(&#39;\0&#39;)。例如: ```c++ string str = "Hello"; int len = str.length(); // len = 5 ``` 需要注意的是,`length()`函数只能用于`string`类,不能用于C风格字符串。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值