看起来您可能需要 C 语言本身的一些帮助,我建议您找一本与 Windows 编程无关的 C 初学者书籍。
MessageBox() 仅显示 C 样式字符串,它们是类型数组,char
其中包含 ASCII 值为 0 的字符。这个零字符就是NUL
字符,并且这样的字符串被称为“NUL 终止”或“零终止”。打印字符串时仅显示 NUL 之前的字符,或在连接字符串时复制。但是,如果数组中没有 NUL 字符,则字符串未正确终止,尝试显示它可能会导致崩溃或显示“垃圾”,如:“我可以喝啤酒吗?# BT&I10)aaX?。
MessageBox()的szTitle和szText参数期望char *
它们是指向这种类型字符串的指针。
如果您尝试传递 aBYTE
而不是 a char *
,则 BYTE 的值将被错误地视为地址。MessageBox() 将尝试以“指定”的值访问内存,BYTE
并且会发生访问冲突。
这个问题的一种解决方案是分配一个类型的缓冲区char
并用于snprintf_s
将数据值转录为字符串表示形式。
例如:
字符输出缓冲区[1024];
snprintf_s(output_buffer, dimensionof(output_buffer), "Geraet = 0x%02X", m_bGeraet[i]);
MessageBox(hwnd_parent, output_buffer, "来自我的消息:", MB_OK);
将显示一个 MessageBox,其中包含一条消息,例如“Geraet = 0x35”。