2010-05-13 3 views
2

플로트 번호가 있습니다. 메시지 상자 안에 인쇄하고 싶습니다. 그것을하는 방법?float 번호를 Visual C++ messagebox에 인쇄하는 방법은 무엇입니까?

MessageBox(hWnd, "Result = <float>", L"Error", MB_OK); 

갱신 :

나는이 작업을 수행하고 메시지 박스 내부 중국어 문자를 출력합니다.

float fp = 2.3333f; 
sprintf(buffer,"%f",fp); 
MessageBox(hWnd, LPCWSTR(buffer), L"Error", MB_OK); 

답변

5

당신이 사용해야는 Win32-기능의 wchar_t 버전을 사용하는 것처럼 swprintf 대신 sprintf의 :

float fp = 2.3333f; 
const size_t len = 256; 
wchar_t buffer[len] = {}; 
swprintf(buffer, L"%f", fp); 
MessageBox(hWnd, buffer, L"Error", MB_OK); 

잠재적 인 버퍼 오버런을 방지 할 수있는 방법도 _snwprintf을 사용할 수

float fp = 2.3333f; 
const size_t len = 256; 
wchar_t buffer[len] = {}; 
_snwprintf(buffer, len - 1, L"%f", fp); 
MessageBox(hWnd, buffer, L"Error", MB_OK); 

또는 더 나은 아직은, std::wostringstream<sstream>에 선언 사용

float fp = 2.3333f; 
std::wostringstream ss; 
ss << fp; 
MessageBox(hWnd, ss.str().c_str(), L"Error", MB_OK); 
1

당신은 % f를 포맷 코드 버퍼에 메시지를 printf를해야하고 다음 메시지 박스()에서 것을 사용

+0

버퍼 유형은 무엇입니까? .c_str()을 할 필요가 있습니까? – karikari

3

당신은 당신이 L 접두사 "오류"문자열을 지정해야하는 이유입니다 메시지 박스의 유니 코드 버전을 사용하고 있습니다 - 이것은 넓은 (16 비트) 문자를 사용해야한다는 것을 알려줍니다. dalle이 말했듯이 이것은 버퍼를 wchar_t로 지정하고 printf의 해당 wchar_t 버전을 사용해야 함을 의미합니다.

중국어 문자가 바이트 문자열을 wchar_t 문자열로 해석하기 때문에 중국어 문자가 표시됩니다. 결국 버퍼를 wchar_t 문자열로 명시 적으로 캐스팅합니다.

관련 문제