【发布时间】:2015-06-03 12:25:17
【问题描述】:
根据这些问题的答案中的陈述
- Is writing to &str[0] buffer (of a std:string) well-defined behaviour in C++11?
- Is it legal to write to std::string?
- writing directly to std::string internal buffers
.. 在 C++11 中,应该可以调用一个 C API 函数,该函数需要一个 char 指针来存储输出,如下所示:
str::string str;
str.reserve(SOME_MAX_VALUE);
some_C_API_func(&str[0]);
但是现在有一种合法的方法来将字符串的大小设置为缓冲区内(以空结尾的)内容的长度吗?像这样的:
str.set_size(strlen(&str[0]));
这是对std::string 的一种非常不美观的滥用,无论如何我听到你说,但我不能在堆栈上创建一个临时的char 缓冲区,所以我必须在堆中创建一个缓冲区并在之后销毁它(我想避免)。
有什么好办法吗?也许不保留,但 调整大小 并在之后调用 erase() 会做到这一点,但感觉不太整洁..
【问题讨论】:
-
你试过
resize吗? -
是的,但
resize()似乎修改了内容。至少当我reserve()缓冲区和resize()之后,字符串是空的。它似乎与resize(SOME_MAX_VALUE)一起工作。如果有人说服我这是最复杂的方法,我很高兴:) -
@frans ,你为什么不使用 std::array 来设置字符串大小??