相关疑难解决方法(0)

合法覆盖std :: string的null终止符?

在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++ stdstring language-lawyer c++11

37
推荐指数
4
解决办法
3194
查看次数

C++,在特定索引处更改字符串的最佳方法

我想在特定的索引处更改C++字符串,如下所示:

string s = "abc";
s[1] = 'a';
Run Code Online (Sandbox Code Playgroud)

以下代码是否有效?这是一种可以接受的方式吗?

我没有找到任何表明它有效的参考:

http://www.cplusplus.com/reference/string/string/

其中说通过"字符串中的重载[]运算符"我们可以执行写操作.

c++ string

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

标签 统计

c++ ×2

c++11 ×1

language-lawyer ×1

stdstring ×1

string ×1