如果CString对象获得最大大小,如何增加CString的大小。或者告诉我可以保存最多数据的函数比CString
更多答案 0 :(得分:1)
CString对字符串缓冲区使用堆分配,因此字符串长度的实际限制取决于许多条件,并且是几百兆字节。
通常,每次字符串需要增长其缓冲区时,它会分配一个比前一个更大的新缓冲区 - 这是一种如何确定缓冲区新大小的策略。根据系统中的实际可用内存量,此重新分配可能会失败或成功。如果它失败了你几乎没有选择你可以做什么 - 最好的选择通常是重启程序。
对于您解决的任务 - 使用COM端口 - 您可以使用MFC :: CArray,它非常便于用作可变大小的数组。您也可以使用std :: vector作为相同的内容。
答案 1 :(得分:1)
在CString中,字符串实际大小和分配的缓冲区由signed ints保存(检出CStringData)。字符串缓冲区本身是动态分配的。这意味着理论上的限制是2 ^ 31个字符。实际上,在32位环境中,由于内存碎片,您将能够获得更少的内容。此外,如果您使用的是Unicode CString,则每个字符都是两个字节,这意味着CString缓冲区将保留较少的文本。在64位环境中,您可以获得多达2 ^ 31个字符。
说完了,你真的想用很长的字符串吗?在达到CString长度限制之前可能还有很多工作要做。