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渡すオブジェクトのサイズをバイト単位で示します。を指定すると、オブジェクト自体std::stringのサイズが得られます。std::stringそのオブジェクトは、実際の文字に動的にストレージを割り当て、それらへのポインタを含みますが、それはオブジェクト自体の一部ではありません。

のサイズを取得するにはstd::string、そのsize/lengthメンバー関数を使用します。

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

正常に動作する理由sizeof("MoraDoraKora")は、文字列リテラルがオブジェクト"MoraDoraKora"ではないためです。std::stringタイプは「13の配列const char1」であるためsizeof、その配列のサイズをバイト単位で報告します。

于 2013-03-23T00:28:35.460 に答える
2

sizeof指すデータのサイズではなく、型のサイズを返します。

通常、文字列は char へのポインターであり、チェーンの最後の char の値は 0 です。

文字列の実際のサイズが必要な場合は、次を使用できますaZOM[0][0].length()

于 2013-03-23T00:29:51.487 に答える