2012-09-08 2 views
0

저는 ncurses로 콘솔 게임을하고 있습니다. 기본 메뉴에서 사용자가 컨트롤 키를 설정할 수있게하려고합니다. 지금까지 내가 이해 한대로, ncurses에서 e.a에 액세스 할 수 있습니다. a - key는 char 'a'의 int 값에의합니다. 'a'와 함께 키 ingame을 사용하면 완벽하게 작동하지만 메뉴가 붙어 있습니다.int에서 char로 변환하여 ncurses 키 바인딩을 표시합니다.

각 키 바인딩에 대해 기본값 인 e.a를 저장했습니다. '에이'. 게임이 시작되면 int 값에서 'a'바인딩을 올바르게 읽고 ingame을 사용할 수 있습니다. 그러나 올바르게 표시되지 않습니다. 나는 그것이 이렇게되기를 바란다 : "왼쪽 : a". 나는 이것을 좋아한다 :

std::string key = "Left: " + static_cast<char>(_value); 

_value는 내가 'a'로 저장하고 초기화 한 int 값이다. 나는 또한 캐스팅하지 않고 그것을 시도했다, btw.

이제 표시되는 내용이 이상합니다. "a"대신에 "~ T^C"라고 쓰여 있습니다. "s"와 "d"의 경우 문자가 전혀 표시되지 않습니다. "w"는 매우 이상한 인코딩 물음표가됩니다.

int 값이나 다른 문자로 인코딩하는 것과 관련이 있다고 가정합니다. 그렇다면 올바른 방법으로 표시하려면 어떻게해야합니까?

고맙습니다.

+0

어떻게 '_value'를 선언합니까? "a"(한 문자)와 "a"(짧은 문자열)는 완전히 다른 의미를 가지고 있음에 유의하십시오. –

+0

왜 키를 매핑하는 데 int를 사용합니까? –

답변

2

문자열 리터럴의 주소와 ASCII 값 _value을 함께 추가합니다. 문자열 key은 그 쓰레기 주소에 어떤 일이 생겨도 생성됩니다.

문자열 리터럴은 N const char의 배열 유형이며 함수 및 연산자 등을 전달할 때 배열은 첫 번째 요소를 가리키는 포인터로 감쇠되며 이는 const char*이됩니다. 포인터에 내장 된 + 연산자는 문자열 연결을 수행하지 않습니다. 오버로드 된 연산자를위한 피연산자 중 적어도 하나로부터 std::string을 생성해야합니다.

std::string key = std::string("Left: ") + static_cast<char>(_value); 
+0

트릭을 해 주셔서 감사합니다! 와우 나는 아직도 이와 같은 세부 사항에 대해 많은 것을 배울 필요가있다. – cpury

관련 문제