在C++中,11 basic_string::c_str被定义为完全相同basic_string::data,而后者又定义为*(begin() + n)和*(&*begin() + n)(when 0 <= n < size())完全相同.
我找不到任何要求字符串在其末尾始终具有空字符的内容.
这是否意味着c_str()不再保证生成以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]吗?
我有一个函数string_to_char(),它试图给我一个字符串形式,我可以将它传递到我正在使用的库中,它想要char *(但我认为与 一起使用const char *,所以我一直在尝试两者)。
我编写的用于测试我的实现的代码string_to_char()如下:
#include <iostream>
const std::string endl = "\n";
char * string_to_char(std::string str)
{
return (char*) str.c_str();
}
int main()
{
std::string test1 = "Some test strin";
std::string test2 = "Some test string";
char * result1 = string_to_char(test1);
char * result2 = string_to_char(test2);
std::cout << "part1" << endl;
std::cout << result1 << endl;
std::cout << string_to_char(test1) << endl;
std::cout << "part2" << endl;
std::cout << result2 << endl; …Run Code Online (Sandbox Code Playgroud)