我需要在C ++中的“char *”中存储一定数量的数据,因为我想避免std :: string在超出max_size()时耗尽内存。但是数据来自网络的数据块,因此每次获得数据块时都需要使用重新分配。在C ++中是否有任何优雅的char *重新分配和连接解决方案?
答案 0 :(得分:3)
在visual studio中,max_size()是4294967294个字符,大约4Gb。如果你能告诉我们你是如何冒险超过这么多角色的话会很有趣。
如果问题没有经常出现,而这只是为了使其安全失败,那么
myConcatStr(string str1, string str2)
{
if (str1.length() + str2.length()) <= str1.max_size() // if there is no overflow problem
str1.append(str2); // use stl append
else
//use alternate method instead or throw an exception
}
答案 1 :(得分:2)
你可以走C路并使用malloc()
/ realloc()
,但是realloc()
只会分配一个新的块,将旧的东西复制到新的东西中,然后释放旧块无论如何。也很难正确使用。
你可以只是分配一个巨大的缓冲区和/或以指数方式增长它,抵消问题的严重性。
或者您可以使用ropes。
答案 2 :(得分:1)
std:当字符串的大小增加时,会想到自动分配的向量。只需将Vector<char>
和push_back()字符分配给您心中的内容。