在 C++11 中,我们知道它std::string
保证是连续的和空终止的(或者更迂腐的是,由 终止charT()
,在这种情况下char
是空字符 0)。
我需要使用这个 C API 来通过指针填充字符串。它写入整个字符串 + 空终止符。在 C++03 中,我总是被迫使用 a vector<char>
,因为我不能假设它string
是连续的或空终止的。但是在 C++11 中(假设一个正确符合的basic_string
类,在某些标准库中仍然存在问题),我可以。
或者我可以吗?当我这样做时:
std::string str(length);
该字符串将分配length+1
字节,最后一个由空终止符填充。那挺好的。但是当我把它传递给 C API 时,它会写length+1
字符。它将覆盖空终止符。
诚然,它将用一个空字符覆盖空终止符。这很有可能会起作用(事实上,我无法想象它是如何不起作用的)。
但我不在乎什么“有效”。我想知道,根据规范,是否可以用空字符覆盖空终止符?