2016-10-24 9 views
0

を行くとき、私はこれで行くとき:異なるサイズ二つの異なる方法で

string s="hello"; 
cout<<sizeof(s); 

そして、それが答えとして4を示しているが、私はいくつかの個々の値のために行くとき:

string s="hello"; 
cout<<sizeof(s[2]); 

出力として1を示します。この出力を見ると、文字列に5文字があるので、1の答えは5でなければなりません。どこが間違っていますか? (私はこれをIdeoneで実行しました)。

+0

[ 'はsizeof operator'(http://en.cppreference.com/w/cpp/を参照されchar型のバイトサイズを返し、charを返しますlanguage/sizeof) – qxz

+1

'std :: string'の' sizeof() 'は文字列中の文字数ではありません。これは 'std :: string'クラスのサイズ(バイト単位)です。 'std :: string'が空であるか、何千もの文字を持つかどうかにかかわらず、サイズは同じです。 –

答えて

0

指定されたパラメータのタイプコンパイル時バイトサイズを返しsizeof()

s変数はstd::stringクラスのインスタンスであるため、sizeof(s)std::stringクラスが含まれているため、32ビットの実行可能ファイル(64ビット実行8)で4 std::stringクラス自体のバイトサイズを返します割り当てられた文字データへのポインタである単一のデータメンバランタイムの文字列に割り当てられている文字の数を知りたい場合は、代わりにstd::string::size()メソッドを使用してください。それはあなたが探している5を返します。

s[2]のでsizeof(s[2]) 1.

0

sizeof operatorは、指定された型または式によって占められるメモリ(バイト単位)を返します。プリミティブ型の場合、これは簡単です。クラス/構造体の場合は、構造体自体のフィールドによって占められたバイト数を返します。必ずしもそのデータを指す必要はありません。そのタイプのすべてのインスタンスで同じになります。

this answerも参照してください。

例:

sizeof(char) // 1 
sizeof(9001) // sizeof(int), usually 4 

struct mystring { 
    const char* data; 
}; 

mystring foo = {"foo"}; 
sizeof(mystring) // probably sizeof(const char*), depending on packing; let's say 4 
sizeof(foo)  // will always be same as above; 4 
foo.data = "cornbread is tasty"; 
sizeof(foo)  // the struct itself still takes up the same amount of space; 4 
関連する問題