相关疑难解决方法(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++ ×1

c++11 ×1

language-lawyer ×1

stdstring ×1