dポイントプレゼントキャンペーン実施中!

質問させて頂きます。
開発環境はVC++.NETです。

CString型のFileDir変数に"TextText"と格納し、

long size = sizeof(FileDir)をしたところ、
sizeには通常8byteが格納されるはずですが、4byteが格納されていました。

なぜ、そうなるのかご存知の方いましたら、
ヒント、回答の方を宜しくお願い致します。

以上です。

A 回答 (4件)

 sizeof は格納されているメモリ容量ではなく、宣言時に物理確保した容量を返します。


 sizeof(FileDir) が4を返す場合、それは "FileDir" という変数が存在するために必要な最低メモリ容量が4バイトであることを表します。
 具体的にいえば、ポインタの容量が4バイトなのです。

 内部に何バイトの文字列が格納されているかは別問題です。
    • good
    • 0

CString型は文字数+文字データと言う形で格納されると聞いたような気がします.



文字数のカウントならGetLength()を使ってみては?
MSDNにありましたよ.
    • good
    • 0
この回答へのお礼

皆様良きアドバイス、ヒントを頂き誠にありがとうございます。

また、レベルの低い質問をすると思いますが、なるべくしないように気をつけるつもりですが、宜しくお願い致します。

お礼日時:2004/08/31 16:27

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

どうでしょう?
    • good
    • 0

sizeofは、オブジェクトの実際のメモリ上の大きさを返すので、変数の中身とは関係ないです。

そもそも実行時ではなくてコンパイル時に決まるものですし。

CString型の変数に格納されているバイト数が知りたいなら、Length() メンバメソッドを使ってください。

この回答への補足

ありがとうございます。

Length()を使用したいと思います。

しかしながら、Length()がどこのクラスの持ちもの
なのでしょうか?
CStringクラスにもそのようなメソッドが見つかりませんでした。
MSDNでも調べたのですが、探せなかったです。

宜しくお願い致します。

補足日時:2004/08/31 15:48
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A