评论公平地解释了这一切。帮助
string aZOM[][2] = {{"MoraDoraKora", "PleaseWorkFFS"},{"This is a nother strang.", "Orly?"}};
cout << sizeof("MoraDoraKora") <<" \n";
//Obviously displayes the size of this string...
cout << sizeof(aZOM[0][0]) << " \n";
//here's the problem, it won't display the size of the actual string... erm, what?
string example = aZOM[0][0];
cout << example << " \n";
cout << aZOM[0][1] << " \n";
//Both functions display the string just fine, but the size of referencing the matrix is the hassle.
答案 0 :(得分:4)
sizeof
为您提供传递给它的对象的大小(以字节为单位)。如果您给它std::string
,它会为您提供std::string
对象本身的大小。现在该对象我为实际字符动态分配存储并包含指向它们的指针,但这不是对象本身的一部分。
要获得std::string
的大小,请使用其size
/length
成员函数:
cout << aZOM[0][1].size() << " \n";
sizeof("MoraDoraKora")
正常工作的原因是因为字符串文字"MoraDoraKora"
不是一个std::string
对象。它的类型是“13个数组const
char1
”,因此sizeof
以字节为单位报告该数组的大小。
答案 1 :(得分:2)
sizeof
返回类型的大小,而不是指向的数据的大小。
字符串通常是指向char的指针,其中链中的最后一个char的值为0.
如果您想要字符串的实际大小,可以使用aZOM[0][0].length()