Char *在C ++中的重新分配

时间:2010-04-29 04:30:02

标签: c++ char concatenation dynamic-memory-allocation

我需要在C ++中的“char *”中存储一定数量的数据,因为我想避免std :: string在超出max_size()时耗尽内存。但是数据来自网络的数据块,因此每次获得数据块时都需要使用重新分配。在C ++中是否有任何优雅的char *重新分配和连接解决方​​案?

3 个答案:

答案 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()字符分配给您心中的内容。