string str = "abcdefgdcb";
cout << sizeof(str.substr(0,3).c_str());
何らかの理由で、上記の文字列は 8 を返します。c_str() が null 文字列を返すと仮定し、sizeof は null を使用して文字列のサイズを決定します。
sizeofは文字列の長さを提供しないため、型のサイズ (const char *この場合) を提供します。試してみてくださいstrlen。
c_strを返しますconst char *。システムではsizeof (const char *) == 8、他のポインタと同様に.
8 は、マシン (64 ビット) 上のポインターのサイズです。これが c_str() が返すものです。
文字列の長さを取得するには、strlen を使用します。
私は仮定しました... sizeofはnullを使用して文字列のサイズを決定します。
問題があります。 sizeof変数のサイズを示しますが、変数内の値とはまったく関係ありません。