3

评论很好地解释了这一切。帮助?

   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.
4

2 回答 2

4

sizeof以字节为单位为您提供传递给它的对象的大小。如果你给它 a std::string,它会给你std::string对象本身的大小。现在该对象我为实际字符动态分配存储空间并包含指向它们的指针,但这不是对象本身的一部分。

要获取 a 的大小std::string,请使用它的size/length成员函数:

cout << aZOM[0][1].size() << " \n";

工作正常的原因是sizeof("MoraDoraKora")字符串文字"MoraDoraKora"不是对象。它的类型是“array of 13 ”,因此以字节为单位报告该数组的大小。std::stringconst char1sizeof

于 2013-03-23T00:28:35.460 回答
2

sizeof返回类型的大小,而不是指向的数据的大小。

字符串通常是指向 char 的指针,其中链中的最后一个 char 的值为 0。

如果你想要字符串的实际大小,你可以使用aZOM[0][0].length()

于 2013-03-23T00:29:51.487 回答