字符串运算符+ =有时在string :: resize()之后不起作用

时间:2012-06-28 18:50:21

标签: c++ stl

假设:

std::string ToShow,NumStr;

以下显示“This is 19 ch00”:

ToShow = "This is nineteen ch";
ToShow.resize(ToShow.length()+0);
NumStr = "00";
ToShow += NumStr;
mvaddstr(15,0,ToShow.c_str());

以下显示“这是19 ch”:

ToShow = "This is nineteen ch";
ToShow.resize(ToShow.length()+1);
NumStr = "0";
ToShow += NumStr;
mvaddstr(16,0,ToShow.c_str());

在第二种情况下,operator + =没有将字符串“0”添加到ToShow的末尾。有谁知道为什么?

1 个答案:

答案 0 :(得分:6)

我的猜测是:

您没有指定要调整大小的值,因此在ToShow.Resize(ToShow.length()+1)之后您的字符串如下所示:

"This is nineteen ch\0"

+= NumStr之后:

"This is nineteen ch\00"

,在调用c_str之后,被修剪为第一个\0,看起来像:

"This is nineteen ch"

(C字符串以空值终止,std :: strings不是)

请尝试拨打.resize(someLength, ' ')