• ベストアンサー

sizeofについて

質問させて頂きます。 開発環境はVC++.NETです。 CString型のFileDir変数に"TextText"と格納し、 long size = sizeof(FileDir)をしたところ、 sizeには通常8byteが格納されるはずですが、4byteが格納されていました。 なぜ、そうなるのかご存知の方いましたら、 ヒント、回答の方を宜しくお願い致します。 以上です。

質問者が選んだベストアンサー

  • ベストアンサー
noname#25358
noname#25358
回答No.3

 sizeof は格納されているメモリ容量ではなく、宣言時に物理確保した容量を返します。  sizeof(FileDir) が4を返す場合、それは "FileDir" という変数が存在するために必要な最低メモリ容量が4バイトであることを表します。  具体的にいえば、ポインタの容量が4バイトなのです。  内部に何バイトの文字列が格納されているかは別問題です。

その他の回答 (3)

  • sismoon
  • ベストアンサー率22% (22/97)
回答No.4

CString型は文字数+文字データと言う形で格納されると聞いたような気がします. 文字数のカウントならGetLength()を使ってみては? MSDNにありましたよ.

ryou0607
質問者

お礼

皆様良きアドバイス、ヒントを頂き誠にありがとうございます。 また、レベルの低い質問をすると思いますが、なるべくしないように気をつけるつもりですが、宜しくお願い致します。

  • Zero-Wing
  • ベストアンサー率41% (22/53)
回答No.2

自分は、すっごい初心者なので間違っているかもしれませんが、CStringは文字列の先頭ポインタを返すのではないのですか?初心者なんで、ポインタが4byteかどうかも知らないんで間違っているかもしれませんが・・・。どうでしょう?

  • yaksa
  • ベストアンサー率42% (84/197)
回答No.1

sizeofは、オブジェクトの実際のメモリ上の大きさを返すので、変数の中身とは関係ないです。そもそも実行時ではなくてコンパイル時に決まるものですし。 CString型の変数に格納されているバイト数が知りたいなら、Length() メンバメソッドを使ってください。

ryou0607
質問者

補足

ありがとうございます。 Length()を使用したいと思います。 しかしながら、Length()がどこのクラスの持ちもの なのでしょうか? CStringクラスにもそのようなメソッドが見つかりませんでした。 MSDNでも調べたのですが、探せなかったです。 宜しくお願い致します。

関連するQ&A