在C++11中,我们知道
我需要使用这个C API填写字符串。它通过指针写入整个字符串和null结尾符。在C++03中,我总是被迫使用一个
那么我真的可以吗?当我这样做时:
std::string
保证是连续的并且以null结尾(或者更加准确地说,以charT()
结尾,在char
的情况下是null字符0)。我需要使用这个C API填写字符串。它通过指针写入整个字符串和null结尾符。在C++03中,我总是被迫使用一个
vector<char>
,因为我不能假定string
是连续的或者以null结尾。但是在C++11中(假设一个正确遵守的basic_string
类,这在一些标准库中仍然是棘手的),我可以做到。那么我真的可以吗?当我这样做时:
std::string str(length);
字符串将分配length+1个字节,其中最后一个由空终止符填充。这很好。但是当我将其传递给C API时,它将写入length+1个字符。它将覆盖空终止符。
诚然,它将使用空字符覆盖空终止符。很有可能这会起作用(实际上,我无法想象它怎么可能不会起作用)。
但我不关心"能不能用",我想知道,根据规范,在null-terminator上覆盖一个null字符是否可以?
std::string
应该可以避免这个问题,对吗? - user743382