相关疑难解决方法(0)

在C++ 11中,std :: string总是以null结尾吗?

在他的网站2008年的一篇文章中,Herb Sutter声明如下:

由于与并发相关的原因,有一个积极的建议是在C++ 0x中进一步加强这一点并且需要空终止并且可能禁止写时复制实现.以下是该文件:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2534.html.我认为本文中的一个或两个提案很可能会被采纳,但我们将在下一个或两个会议上看到.

我知道C++ 11现在保证std :: string内容连续存储,但他们是否在最终草案中采用了上述内容?

现在使用类似的东西会安全&str[0]吗?

c++ string null-terminated language-lawyer c++11

44
推荐指数
1
解决办法
7517
查看次数

将C++ 11 std :: string :: operator []返回以null结尾的缓冲区

我有一个std::string类的对象,我需要传递给C函数,char*通过迭代它并搜索空终止符号来操作缓冲区.

所以,我有这样的事情:

// C function
void foo(char* buf);

// C++ code
std::string str("str");
foo(&str[0]);
Run Code Online (Sandbox Code Playgroud)

假设我们使用C++ 11,因此我们保证std::string表示将具有连续存储的字符.

但我想知道是否有任何保证&str[0]会指向缓冲区结束\0?是的,有c_str成员函数,但我在谈论operator[].

有人可以引用标准吗?

c++ c++11

5
推荐指数
2
解决办法
498
查看次数

标签 统计

c++ ×2

c++11 ×2

language-lawyer ×1

null-terminated ×1

string ×1