2012-06-28 4 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()); 

두 번째 경우 연산자 + =는 ToShow의 끝에 문자열"0 "을 추가하지 않습니다. 아무도 이유를 아나요?

+2

'resize'의 추가 요소는'\\ 0 '이라고 생각합니다. 그것이 맞다면 설명 할 수 있습니다. – chris

+2

당신의 캐릭터를 센다. 그리고 그들을 당신이'mvaddstr'에게 넘기는 크기와 비교한다. 또한 귀하의 예는 혼란 스럽습니다. 당신은 말합니다 - * "다음은"This is 19 ch00 "을 표시합니다 :"* "이것은 당신의 문자열이" "이것은 19 개의 채널이기 때문에 분명히 아닙니다. ''19 ''와''19 netseen' '은 같은 것이 아닙니다. –

+0

에드 S : 본문은 단지 필러였습니다. 아마 "-------------------"분명했을 것입니다. – ExOttoyuhr

답변

6

내 생각은 다음과 같습니다

"This is nineteen ch\0" 

그리고 += NumStr 후 : ToShow.Resize(ToShow.length()+1) 후 문자열처럼 보이는, 그래서 당신은,와 크기를 조정 값을 지정하지

"This is nineteen ch\00" 

하는 , c_str을 호출 한 후 첫 번째 \0으로 트림되고 다음과 같이 표시됩니다.

"This is nineteen ch" 

대신 .resize(someLength, ' ')를 호출하십시오 (C 문자열은 null로 종료하고, 표준 : : 문자열이 아니다).

+0

이 문제가 해결되었습니다. – ExOttoyuhr

관련 문제