あなたの質問から、、、、またはヒープで動作する他の関数を使用して、ヒープにメモリを割り当てたいと思います。おそらく、できるだけ少ないヒープメモリを使用する必要があります。new
malloc
LocalAlloc
スタック上のメモリを操作する場合、それほど正確である必要はありません。メモリの割り当ては非常に高速で(ヒープの場合よりも約100倍または1000倍高速)、現在の関数から戻った後、メモリは自動的に解放されます。だからあなたはただ変数を定義することができます
TCHAR szBuffer[16384];
スタック上の16Kはほとんど何もありません。GetPrivateProfileString
次に、szBuffer
としてで呼び出すことができますlpReturnedString
。この関数GetPrivateProfileString
は、バッファにコピーされた文字数を返します。値が16K-1未満の場合、正確なバッファサイズがわかります。これで、ヒープ上のサイズのメモリブロックを割り当て、データをブロックにコピーできszBuffer
ます。の戻り値がGetPrivateProfileString
16K-1に等しい場合は、バッファが小さすぎます。バッファサイズを2倍にする(そして今はヒープのバッファを操作する)ことができる場合は、これをiniファイルのエラーとして解釈することをお勧めします。すべて本物以前使用したiniファイルは小さかった。エントリのサイズは、ほとんどの場合260文字未満です。したがって、エントリサイズおろし金は16Kであり、エラーとして解釈できます。
ちなみに、GetFileSizeExに関してINIファイルのサイズを確認できます。エントリのサイズは、INIファイルのサイズよりも小さくする必要があります。
プログラムに含める必要のあるINIサイズに対するいくつかの制限。エントリサイズがGBで測定される場合、問題が発生する可能性があります。たとえば、許可されるエントリのサイズを16Kに制限してみませんか?