使用Win32错误的整数
Using Integers with Win32 error
很抱歉,这是一个回收的问题,但这里的大多数帮助都没有帮助。我的问题是,我希望能够在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;
}
相关文章:
- 给定一个整数数组,需要在Max_Heap上运行操作。得到错误"segmentation fault",有什么想法吗?(C++)
- 为什么在我的 main 函数中声明整数后我的整数数组中会出现错误?
- 为什么在将 void 指针转换为整数指针时出现分段错误
- 野牛/flex:计算器将双精度值解释为整数,所以我添加了 YYSTYPE 双精度 #define 但我有多个编译错误
- C++/错误:表达式必须具有整数或无作用域枚举类型
- Qt 错误 iso c++ 禁止指针和整数之间的比较 -permissive
- C++字符串到整数错误值可以反转吗?
- 我在c++中遇到了一个奇怪的错误,其中一个计算2个小整数加法的语句溢出到一个长值中
- (C/C++)fscanf_s从txt文件以字符形式读取数组时缺少整数参数错误
- 自定义哈希表实现-将字符串映射到整数时出现内存错误
- 我需要帮助创建一个评分系统,但它一直给我一个错误,注释掉的整数是给我带来麻烦的部分
- C++ 在方程中使用变量;错误:表达式必须具有整数或无作用域枚举类型及其他
- 谷歌启动2018,测试用例中的整数错误
- 使用递归函数 (c++) 将长字符串转换为整数时输出错误
- 运行时错误:有符号整数溢出:964632435 * 10 无法在类型 'int' 中表示
- C++字符* 到整数错误
- 使用boost multiprecision/mpfr float-字符串不能被解释为有效的整数错误
- 产生十六进制值的整数错误
- 原子整数错误地递增?英特尔 TBB 实施
- Libjson解析整数错误