2009-04-13 66 views
0

CStringオブジェクトが最大サイズを取得する場合、CStringのサイズを増やす方法。またはCStringよりも最大のデータを保持できる関数を教えてくださいCStringサイズクラス

+0

実際に発生する問題は何ですか? – sharptooth

+0

だから、CStringの最大サイズは –

+0

です。また、CStringのサイズを増やすことができるDynamic CStringを作成する方法もあります。 –

答えて

1

CStringは文字列バッファのヒープ割り当てを使用するため、文字列長の実際の制限は条件の数によって異なり、数百MBです。

一般に、文字列がバッファを拡張する必要があるたびに、前の文字列より新しいバッファが割り当てられます。バッファの新しいサイズを決定する方法があります。システム内の使用可能なメモリの実際の量に応じて、この再割り当ては失敗するか、成功する可能性があります。失敗した場合、できることはほとんどありません。通常、プログラムを再起動することをお勧めします。

COMポートを使用して作業する場合は、可変サイズの配列として非常に便利なMFC :: CArrayを使用できます。また、std :: vectorを同じものに使うこともできます。

1

CStringでは、文字列の実際のサイズと割り当てられたバッファは符号付き整数(CStringDataをチェックアウト)によって保持されます。文字列バッファ自体は動的に割り当てられます。これは、理論上の制限が2^31文字であることを意味します。実際には、32ビット環境ではメモリの脆弱性のためにはるかに少なくなるでしょう。また、Unicode CStringを使用している場合、各文字は2バイトです。つまり、CStringバッファにはテキストが少なくなります。 64ビット環境では、2^31文字を取得できる可能性があります。

あなたは本当に長い文字列で作業しようとしていますか?あなたがCStringの長さ制限を打つ前に、おそらく多くのことがあります。