使用Win32错误的整数

Using Integers with Win32 error

本文关键字:整数 错误 Win32 使用      更新时间:2023-10-16

很抱歉,这是一个回收的问题,但这里的大多数帮助都没有帮助。我的问题是,我希望能够在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。如果你需要更多信息,请告诉我,我会尽我所能合作。

谢谢:)

#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);
函数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);

您的缓冲区是在堆栈上分配的临时变量,当intToString函数返回时,它将消失。

尝试:

LPCWSTR intToString(int i){
    static TCHAR buf[32];
    _itow_s(i, buf, 10);
    return buf;
}
相关文章: