2012-06-28 79 views
0

后有时不工作假设:字符串符+ =串::调整大小()

std::string ToShow,NumStr; 

下面显示 “这是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 + =未在ToShow的末尾添加字符串”0“。有谁知道为什么?

+2

我想'resize'中的额外元素应该是''\ 0''。这将解释它是否正确。 – chris

+2

计算您的角色并将其与您传递给'mvaddstr'的​​大小进行比较。另外,你的例子很混乱。你说 - *“下面显示”这是19 ch00“:”*,这显然不是因为你的字符串是“”这是十九个“。请注意,“19”和“19”不是一回事。 –

+0

Ed S:文本只是一个填充符;据推测“-------------------”会更清楚。 – ExOttoyuhr

回答

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 ::字符串不)

尝试调用.resize(someLength, ' ')代替。

+0

这解决了这个问题。 – ExOttoyuhr