std::string::resize() 方法是否管理终止字符?

piw*_*iwi 4 c++ string c++11

我正在将流中的一些数据复制到字符串中,因此我考虑使用实际字符数加一作为终止字符来调整字符串大小,如下所示:

std::istringstream stream { "data" };
const std::size_t count = 4;

std::string copy;
copy.resize(count + 1);

stream.read(&copy[0], count);
copy[count] = 0;
Run Code Online (Sandbox Code Playgroud)

但是,在这种情况下,copy表示它的大小为5(自从我调用以来,这是一致的resize(5))。这是否意味着resize()会添加额外的终止字符本身?这意味着我不必担心\0在调用后追加read(&data[0], count)

JBL*_*JBL 6

不,你不必。本string类文摘“空值终止的字符序列”的概念,让你不必关于担心了。

另外,返回的字符串的大小不包括终止符,这与我提到的行为是一致的,因为如果您不必处理终止符,您就不必知道它。您的字符串只是您要操作的字符,而不必担心与您的实际数据无关的“实用程序”字符。