gpt4 book ai didi

c++ - 如何直接从 char* 数组创建 std::string 而无需复制?

转载 作者:IT老高 更新时间:2023-10-28 22:01:16 42 4
gpt4 key购买 nike

假设我有一个字符数组,我在堆上分配了它,我想将它转换成一个 std::string。目前我正在做以下事情:

char *array = new char[size];
WriteIntoArray(array, size);
std::string mystring(array);
delete[] array;
return mystring; // or whatever

根据我在 Internet 上阅读的内容 (http://www.cplusplus.com/reference/string/string/string/),字符串构造函数执行了我传递给它的缓冲区的拷贝,让我释放缓冲区(稍后,字符串释放其内部缓冲区)。我想做的是分配我的缓冲区,将它的控制权转移给字符串,然后让它在我的缓冲区被破坏时释放它。

问题initializing std::string from char* without copy看起来很有希望,但是我的代码依赖于 API 调用(上例中的“WriteIntoArray”),这些调用必须写入一个字符数组,所以我必须创建一个 C 风格的 char* 缓冲区,并且不能将我的代码转换为仅使用内置字符串操作(这是建议的答案)。

是否有一些标准的方法来做到这一点,或者我应该只写自己的字符串类(呃)?谢谢!

最佳答案

如果您使用的是符合标准的 C++0x 实现,或者是保证 std::string 连续存储的众多 C++ 库之一,那么您可以获得 char* 直接指向 std::string 使用的存储空间。

例如:

std::string mystring;
mystring.resize(size);
WriteIntoArray(&mystring[0], size);
return mystring;

但是,您可能需要仔细考虑空终止符。

关于c++ - 如何直接从 char* 数组创建 std::string 而无需复制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6700480/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com