如何将浮点数打印到visual c ++ messagebox?

时间:2010-05-13 10:43:59

标签: visual-c++

我有一个浮点数。我想在消息框中打印它。怎么做?

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

更新

我这样做,它在消息框中打印出中文字符。

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

3 个答案:

答案 0 :(得分:5)

当您使用wchar_t版本的Win32功能时,应使用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 :(得分:3)

您正在使用Unicode版本的MessageBox,这就是为什么您必须使用L前缀指定“Error”字符串 - 这告诉它应该使用宽(16位)字符。正如dalle所说,这意味着你必须将缓冲区指定为wchar_t,并使用相应的printf的wchar_t版本。

你会看到中文字符,因为它将你的字符串解释为一串wchar_t。毕竟,您明确地将缓冲区转换为wchar_t字符串。

答案 2 :(得分:1)

您必须使用%f格式代码将消息打印到缓冲区,然后在MessageBox()

中使用它