- ベストアンサー
sizeofについて
質問させて頂きます。 開発環境はVC++.NETです。 CString型のFileDir変数に"TextText"と格納し、 long size = sizeof(FileDir)をしたところ、 sizeには通常8byteが格納されるはずですが、4byteが格納されていました。 なぜ、そうなるのかご存知の方いましたら、 ヒント、回答の方を宜しくお願い致します。 以上です。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
sizeof は格納されているメモリ容量ではなく、宣言時に物理確保した容量を返します。 sizeof(FileDir) が4を返す場合、それは "FileDir" という変数が存在するために必要な最低メモリ容量が4バイトであることを表します。 具体的にいえば、ポインタの容量が4バイトなのです。 内部に何バイトの文字列が格納されているかは別問題です。
その他の回答 (3)
- sismoon
- ベストアンサー率22% (22/97)
CString型は文字数+文字データと言う形で格納されると聞いたような気がします. 文字数のカウントならGetLength()を使ってみては? MSDNにありましたよ.
- Zero-Wing
- ベストアンサー率41% (22/53)
自分は、すっごい初心者なので間違っているかもしれませんが、CStringは文字列の先頭ポインタを返すのではないのですか?初心者なんで、ポインタが4byteかどうかも知らないんで間違っているかもしれませんが・・・。どうでしょう?
- yaksa
- ベストアンサー率42% (84/197)
sizeofは、オブジェクトの実際のメモリ上の大きさを返すので、変数の中身とは関係ないです。そもそも実行時ではなくてコンパイル時に決まるものですし。 CString型の変数に格納されているバイト数が知りたいなら、Length() メンバメソッドを使ってください。
補足
ありがとうございます。 Length()を使用したいと思います。 しかしながら、Length()がどこのクラスの持ちもの なのでしょうか? CStringクラスにもそのようなメソッドが見つかりませんでした。 MSDNでも調べたのですが、探せなかったです。 宜しくお願い致します。
お礼
皆様良きアドバイス、ヒントを頂き誠にありがとうございます。 また、レベルの低い質問をすると思いますが、なるべくしないように気をつけるつもりですが、宜しくお願い致します。