如何将char数组放入std :: string

时间:2012-02-10 19:35:44

标签: c++ string std

我分配一个char数组然后我需要将它作为字符串返回,但我不想复制这个char数组然后释放它的内存。

        char* value = new char[required];
        f(name, required, value, NULL); // fill the array
        strResult->assign(value, required);
        delete [] value;

我不想像上面那样做。我需要将数组放在std字符串容器中。我怎么能这样做?

EDIT1:

我明白我不应该并且字符串不是为此而设计的。 MB有人知道char数组的另一个容器实现,我可以用它吗?

4 个答案:

答案 0 :(得分:5)

在C ++ 11中,保证以下功能:

std::string strResult(required, '\0');
f(name, required, &strResult[0], NULL);

// optionally, to remove the extraneous trailing NUL (assuming f NUL-terminates):
strResult.pop_back();

return strResult;

在C ++ 03中,保证无法正常工作,但Library Issue 530已解决了大多数标准库实现多年来实现的问题,所以可能 安全,但最终依赖于实现。

答案 1 :(得分:3)

不是将value传递给函数,而是传入&s[0],其中s是正确长度的std::string

答案 2 :(得分:2)

你不应该。 std::strings并非旨在公开其内部数据以用作缓冲区 不能保证字符串的缓冲区地址在外部函数执行期间不会改变,尤其是在函数分配或释放内存本身时。 并且不能保证字符串的缓冲区是连续的。

例如,请参阅here

您帖子中的示例是更好的方法。

答案 3 :(得分:0)

你必须将它复制到一个字符串。 AFAIK std :: string不允许您访问它的内部目录以进行任何类型的基于地址的直接分配。

std::string s(charArry);