std::stringstr(array.begin(),array.end())是否自行添加空字符?
我对 C++ 很陌生,我想知道是否std::string str(array.begin(), array.end())在字符串的末尾添加了一个空字符?我查了这个参考,但我无法弄清楚。我很感激你的回答!
编辑:我正在使用 C++11 并且我有一个boost::array<u_int8_t>未知的大小。我的目标是之后打印它,str.c_str()因为%s期待一个char*.
str = std::string(arr.begin(),arr.end());
ROS_INFO("Got response: n %s", str.c_str());
回答
C++ 标准指定c_str()返回以空字符结尾的字符串(字符串的内容后跟 a ' ')。根据 C++ 标准版本,您可能会也可能不会保证str[str.size()]也会为您提供' '.
这是 C++ 标准指定的唯一内容。是否' '最初由其构造函数添加,包括此特定构造函数:这是未指定的。
但是,由于您肯定' '会在寻找它时得到最重要的信息,因此这是一个有争议的问题。它会在那里。
回答
由于 C++11std::string必须包含终止空字符。但是, a 中的空字符std::string不一定终止std::string.
我希望通过以下示例能更清楚:
#include <string>
#include <iostream>
int main() {
std::string x{"Hello World"};
std::cout << x.c_str() << "n";
x[5] = ' ';
std::cout << x << "n";
std::cout << x.c_str();
}
印刷:
Hello World
HelloWorld
Hello
我们可以通过获取以空字符结尾的 c 字符串c_str来获得预期的输出。该<<超载知道在哪里停下来,因为有一个空终止符。尽管在