在C++ 11中,我们知道std::string保证是连续的和以null结尾的(或更迂腐,终止于charT(),在char空字符0 的情况下).
我需要使用这个C API,通过指针填充字符串.它写入整个字符串+ null终止符.在C++ 03中,我总是被迫使用a vector<char>,因为我无法假设它string是连续的或以null结尾的.但是在C++ 11中(假设一个合适的basic_string类,在某些标准库中仍然是不合适的),我可以.
或者我可以吗?当我这样做:
std::string str(length);
Run Code Online (Sandbox Code Playgroud)
该字符串将分配length+1字节,最后一个由null终止符填充.非常好.但是当我把它传递给C API时,它会写出length+1字符.它将覆盖null终止符.
不可否认,它将用空字符覆盖null终止符.赔率是好的,这将工作(事实上,我无法想象它怎么可能不工作).
但我不关心什么"有效".我想知道,根据规范,是否可以用空字符覆盖null终止符?
我想在特定的索引处更改C++字符串,如下所示:
string s = "abc";
s[1] = 'a';
Run Code Online (Sandbox Code Playgroud)
以下代码是否有效?这是一种可以接受的方式吗?
我没有找到任何表明它有效的参考:
http://www.cplusplus.com/reference/string/string/
其中说通过"字符串中的重载[]运算符"我们可以执行写操作.