【发布时间】:2019-04-30 20:30:59
【问题描述】:
我遇到了一个问题,我需要找到数组的大小来确定数组的长度。我的理解是一个字符是 1 个字节,一个字符串是 2 个字节('\0' 字符的一个额外字节)。
但是,我发现字符串数组的单个元素是 24 字节。
我输出了一个字符串、char 和 int 变量的大小来验证我的理解。我对 int、char 和 string 数组的单个元素做了同样的事情。
#include <iostream>
using namespace std;
int main()
{
string strArr[1] = {" "};
cout
<< sizeof " " << endl
<< sizeof strArr[0] << endl
<< sizeof strArr << endl << endl;
char charArr[1] = {'a'};
cout
<< sizeof 'a' << endl
<< sizeof charArr[0] << endl
<< sizeof charArr << endl << endl;
int intArr[1] = {1};
cout
<< sizeof 1 << endl
<< sizeof intArr[0] << endl
<< sizeof intArr << endl;
return 0;
}
预期结果:
2
2
2
1
1
1
4
4
4
实际结果:
2
24
24
1
1
1
4
4
4
【问题讨论】:
-
string strArr[1]是一个包含 1 个std::string的数组。strArr[0]是std::string,而不是char。最后,sizeof和std::string是常量,不反映它包含的值的大小。 -
使用
.size()获取std::string的大小。使用sizeof获取chars 在char数组中的数量。 -
你应该先阅读一点关于字符串的知识。字符串的大小取决于它的字符数,你可以通过 str.length() 得到它。如果您改用 char 数组,则应在数组末尾添加 '\0',这样可以使字符数 +1。
-
@HolyBlackCat 使用
std::size而不是sizeof来获取数组 1 的长度。这样您(不是专门)就不会意外地获得您认为是指针的大小数组但是还没有学过调整函数参数和 2. 这样就不用考虑元素的大小了(以防以后碰巧用到wchar_t或者char32_t)。 -
sizeof运算符给出对象的大小(数组/结构/类/等),而不是其内容。