相关疑难解决方法(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 ++中的字符串?

协议缓冲区说它可以包含任意字节序列.但如果我的数据包含'\ 0',协议缓冲区如何从字符串变量编码我的整个数据.

c++ string byte protocol-buffers

18
推荐指数
1
解决办法
1万
查看次数

std :: string等效于具有空字符的数据?

我想读取一个二进制文件,并使用类似的东西std::string自动调整缓冲区大小等.

我正在使用Visual C++.我有什么选择?

c++ string file-io visual-c++

4
推荐指数
3
解决办法
2880
查看次数

Visual Studio下的string :: swap复杂性

cppreference页说,有关std::basic_string::swap它具有恒定的复杂性.我认为这意味着不能发生复制内容,只能交换指针或类似内容.我写了一个测试代码并且经历过它确实在VS2010下移动了内容.测试代码:

std::string s1("almafa");
std::string s2("kortefa");
std::cout << "s1.c_str(): "<< (void*)s1.c_str() << std::endl;
std::cout << "s2.c_str(): "<< (void*)s2.c_str() << std::endl;
std::cout << "SWAP!" << std::endl;
s1.swap(s2);
std::cout << "s1.c_str(): "<< (void*)s1.c_str() << std::endl;
std::cout << "s2.c_str(): "<< (void*)s2.c_str() << std::endl;
Run Code Online (Sandbox Code Playgroud)

g ++ 4.6.3上的输出

s1.c_str(): 0x22fe028
s2.c_str(): 0x22fe058
SWAP!
s1.c_str(): 0x22fe058
s2.c_str(): 0x22fe028
Run Code Online (Sandbox Code Playgroud)

VS2010的输出

s1.c_str(): 000000000022E2D0
s2.c_str(): 000000000022E320
SWAP!
s1.c_str(): 000000000022E2D0
s2.c_str(): 000000000022E320
Run Code Online (Sandbox Code Playgroud)

它是标准的分歧还是我不知道的事情发生了?

c++ stl visual-studio-2010

4
推荐指数
1
解决办法
183
查看次数

C++:null字符如何在std :: string中工作?

我来自C背景,在学习C++时我遇到了<string>头文件.在C字符串中,将是一个以字符结尾的字符数组'\0'.

但是,在std::string我发现情况并非如此,并且在任何有效索引处插入/替换字符时,不会像我期望的那样修剪字符串.

string s;

getline(cin, s);

// remove all punctuation 
for(string::size_type i = 0, n = s.size(); i < n; i++)
{
     if(ispunct(s[i]))
         s[i] = '\0';
}
Run Code Online (Sandbox Code Playgroud)

输入:你好,世界!!!!

输出:Hello World

预期产量:你好

在观察上述行为时,我假设C++中的字符串不是空终止的.然后我发现这个问题在字符串中使用空字符(C++)这让我感到困惑.

string s = "Hello\0, World";

cout << s << endl;
Run Code Online (Sandbox Code Playgroud)

输出:你好

预期产量:你好,世界

如果有人能解释这种行为背后的原因,将会有所帮助.

c++ string

3
推荐指数
1
解决办法
881
查看次数