C 文本写入随机数据.是否有缓冲区溢出
C++ TextOut writes random data. Is there a buffer overflow?
我正在为使用Winapi的编程类编写一些示例程序。我熟悉GUI编程,但不熟悉C 。作为测试的一部分,我遇到了异常。我希望有人会知道我在做什么,并能够解释修复程序。以下是回调功能。大多数代码直接从基本涂料上的示例中复制。
LRESULT CALLBACK WinProc(HWND hwnd, UINT msg, WPARAM w, LPARAM l)
{
PAINTSTRUCT ps;
HDC hdc;
std::string txt = "Hello ";
switch(msg)
{
hdc = BeginPaint(hwnd, &ps);
TextOut(hdc, 0, 60, txt.c_str(), 45);
EndPain, h, &ps);
}
}
因此,该函数应该只是在GUI上打印" Hello",而是我看到了" Hello XC"。我将字符串的长度扩大到45,看到了更多。它打印文本的随机位。我已经看到了将要用于代表的班级名称和字符串值。
我不知道为什么会发生这种情况,但是看来TXT正在读取远远超过缓冲区的末端。我添加了一个 0。没有不同。每次值都不同。
任何想法发生了什么事?
textout使用最终参数CCHSTRING来确定要打印多少个字符。您必须告诉它正确的号码。
https://msdn.microsoft.com/en-us/library/windows/desktop/dd145133.aspx
lpString [in]
指向要绘制的字符串的指针。该字符串不需要零终止,因为CCHSTRING指定了字符串的长度。cchstring [in]
字符串的长度由lpstring指向字符。
TextOut()
不会停止在零终端写文本,只要您指定,它就会继续进行。最后一个参数告诉函数编写多少个字符。而不是给它45,而是像strlen(txt.c_str())
一样给它。
相关文章:
- 是否可以从 OpenGL 缓冲区获取原始大小的像素?
- 是否可以在 OpenGL 中的同一调用中呈现两个具有不同索引起点的不同缓冲区?
- 是否可以将 std::basic_ifstream 和 std::basic_ofstream 与自定义缓冲区一起使用?
- 是否可以在C++中拼接缓冲区,零拷贝?
- std::vector::assign/std::vector::operator=(const&) 是否保证在"this"中重用缓冲区?
- 输出操纵器 std::ends 是否向输出缓冲区添加空字符?
- 是否可以等待来自暂存缓冲区的传输完成而不调用 vkQueueWaitIdle
- Qt是否能够支持小缓冲区低延迟视频应用(例如实时流)
- C 文本写入随机数据.是否有缓冲区溢出
- 在C 中,是否有可能在不兼容类型的std ::向量对象之间传输不同类型的缓冲区
- 我是否需要删除传递给谷歌协议缓冲区(protobuf)的对象
- 是否可以在同一设备缓冲区上一个接一个地调用 OpenCL 内核?
- 当构建器被销毁时,缓冲区是否有效
- 使用大长度缓冲区初始化字符串流是否会使内存使用量加倍
- 如何检查输入缓冲区是否为空
- 如何检查 cin 缓冲区是否包含相同的值 0.5 秒 (C++)
- 将新放置到缓冲区后,缓冲区和实例是否具有相同的 void* 地址?
- 是否存在以相反顺序填充缓冲区的MEMSET函数
- 是否可以在键盘输入缓冲区中向前看并在MFC/Win32中检测条形码条目
- 换行符是否也会刷新缓冲区?