CStringの最大バイト数 – プログラミング – Home

通知
すべてクリア

[解決済] CStringの最大バイト数


せんたく
 せんたく
(@せんたく)
ゲスト
結合: 22年前
投稿: 13
Topic starter  

いつも拝見させていただいております。
過去ログを見たのですが見あたらないので、新規に質問させていただきます。

MFCのCString型は可変長の文字列格納型と認識しているのですが、
実際何バイトまで格納可能・・というような制限があるのでしょうか?

それともVCとしてのリソースが許す限り
いくらでも(何文字でも)格納できるものなのでしょうか?


引用未解決
トピックタグ
汎
 汎
(@汎)
ゲスト
結合: 22年前
投稿: 43
 

適当な回答なので、詳しくは他の人の回答をどうぞ。

VC の CString のメンバ関数の引数で長さに相当するものは int 型です。
領域を確保するmalloc の引数 size_t は _int64 と定義されています。
つまり、処理系に応じて限界が変わりますが、
intの範囲で使う分には、全てのメンバ関数で処理可能ということではないかと思います。

もし、こんな大きなエリアを取るようにプログラムを設計したら、その人は別の意味で神様かも
しれませんね。


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

> 領域を確保するmalloc の引数 size_t は _int64 と定義されています。
size_tはunsigned int となってるはずです。

CStringの理論的限界についてはINT_MAXまでだとは思いますが。


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

.Netだと、_int64だったりします。
おかげで、.NetでCString::GetLengthを呼ぶときにintのバッファに入れようとすると
いつもウォーニングがでます。

環境によって多少に違いはあるということですね。


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

> .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());
}
}


返信引用
せんたく
 せんたく
(@せんたく)
ゲスト
結合: 22年前
投稿: 13
Topic starter  

To:汎様、たいちう様、PATIO様

ご回答ありがとうございます。
作文のような文字列でなければ意識しないでよさそうですね。
私が実現したいことの範囲内でおさまることがわかりました。

どうもありがとうございましたm(_ _)m


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました