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

ExO*_*uhr 0 c++ stl

假设:

std::string ToShow,NumStr;
Run Code Online (Sandbox Code Playgroud)

以下显示"This is 19 ch00":

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

以下显示"这是19 ch":

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

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

Kos*_*Kos 6

我的猜测是:

您没有指定要调整大小的值,因此在ToShow.Resize(ToShow.length()+1)您的字符串看起来像:

"This is nineteen ch\0"
Run Code Online (Sandbox Code Playgroud)

之后+= NumStr:

"This is nineteen ch\00"
Run Code Online (Sandbox Code Playgroud)

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

"This is nineteen ch"
Run Code Online (Sandbox Code Playgroud)

(C字符串以null结尾,std :: strings不是)

试着.resize(someLength, ' ')改为打电话.