对不起,这是一个非常循环的问题,但这里的大部分帮助都没有帮助。我的问题是我希望能够在Win 32应用程序中显示整数,但显然它们需要以某种格式打印(我相信LPCWSTR)。所以我尝试了这个:
LPCWSTR intToString(int i){
TCHAR buf[32];
_itow_s(i, buf, 10);
return buf;
}
但是当我用
打印时TextOut(hdcBuffer, 30, 40, intToString(xValue), 32);
它在屏幕上打印了很多随机字符,就像试图在记事本中打开文件一样,当它真的不打算在那里打开时。 (所以随机方块,线条,&符号等) 我尝试过sprintf()和其他一些我不记得的事情。请不要建议下载新的库或任何东西,因为我不想这样做,特别是,除非这是唯一的方法。
再次,抱歉这样的重复,但其他页面上的解决方案似乎不起作用。我在Windows 7计算机上使用Visual Studio 2012。如果您需要更多信息,请说明,我会尽我所能合作。
谢谢:)
答案 0 :(得分:3)
#include <sstream>
template<typename U>
std::wstring towstring(const U& val)
{
std::wstringstream ss;
ss << val;
return ss.str();
}
后来在代码中:
TextOut(hdcBuffer, 30, 40, towstring(xValue).c_str(), 32);
答案 1 :(得分:0)
函数intToString
它返回一个指向局部变量的指针。一旦函数返回buf
不再存在并尝试引用它曾经占用的内存导致未定义的行为。这意味着有时它可能会起作用,而其他时候可能没有,但没有任何保证。
您可以通过将缓冲区传递给intToString
并返回指向它的指针来实现此目的。
template<int size>
const wchar_t* intToString(int i, wchar_t (&buf)[size])
{
_itow_s<size>(i, buf, 10);
return buf;
}
TCHAR buf[20];
TextOut(hdcBuffer, 30, 40, intToString(xValue, buf), 32);
答案 2 :(得分:-6)
你的缓冲区是在堆栈上分配的临时变量,当intToString
函数返回时它将消失。
尝试:
LPCWSTR intToString(int i){
static TCHAR buf[32];
_itow_s(i, buf, 10);
return buf;
}