いつも拝見させていただいております。
過去ログを見たのですが見あたらないので、新規に質問させていただきます。
MFCのCString型は可変長の文字列格納型と認識しているのですが、
実際何バイトまで格納可能・・というような制限があるのでしょうか?
それともVCとしてのリソースが許す限り
いくらでも(何文字でも)格納できるものなのでしょうか?
適当な回答なので、詳しくは他の人の回答をどうぞ。
VC の CString のメンバ関数の引数で長さに相当するものは int 型です。
領域を確保するmalloc の引数 size_t は _int64 と定義されています。
つまり、処理系に応じて限界が変わりますが、
intの範囲で使う分には、全てのメンバ関数で処理可能ということではないかと思います。
もし、こんな大きなエリアを取るようにプログラムを設計したら、その人は別の意味で神様かも
しれませんね。
> 領域を確保するmalloc の引数 size_t は _int64 と定義されています。
size_tはunsigned int となってるはずです。
CStringの理論的限界についてはINT_MAXまでだとは思いますが。
.Netだと、_int64だったりします。
おかげで、.NetでCString::GetLengthを呼ぶときにintのバッファに入れようとすると
いつもウォーニングがでます。
環境によって多少に違いはあるということですね。
> .Netだと、_int64だったりします。
そうでしたか。失礼しました。
ついでに実際的な限界の測定方法等を。
(1)
CString s = a;
for (int i=0;i<100;i++) {
TRACE(%2d : %x %d\n, i, s.GetLength(), s.GetLength());
s = s + s;
}
(2)
for (int i=0;i<100;i++) {
{
CString s('a', 1 << i);
TRACE(%2d : %x %d\n, i, s.GetLength(), s.GetLength());
}
}
To:汎様、たいちう様、PATIO様
ご回答ありがとうございます。
作文のような文字列でなければ意識しないでよさそうですね。
私が実現したいことの範囲内でおさまることがわかりました。
どうもありがとうございましたm(_ _)m