gpt4 book ai didi

c++ - dmDeviceName 只是 'c'

转载 作者:行者123 更新时间:2023-11-30 02:07:29 25 4
gpt4 key购买 nike

我正在尝试使用 DEVMODE.dmDeviceName 获取每台显示器的名称:

dmDeviceName
A zero-terminated character array that specifies the "friendly" name of the printer or display; for example, "PCL/HP LaserJet" in the case of PCL/HP LaserJet. This string is unique among device drivers. Note that this name may be truncated to fit in the dmDeviceName array.

我正在使用以下代码:

log.printf("Device Name: %s",currDevMode.dmDeviceName);

但对于每个监视器,名称仅打印为 c。来自 DEVMODE 的所有其他信息似乎打印正常。出了什么问题?

最佳答案

您很可能正在使用该结构的 Unicode 版本,因此将宽字符传递给 printf。由于您使用的格式字符串暗示 char 数据存在不匹配。

UTF-16 编码导致 ASCII 范围内的字符每隔一个字节为 0,因此 printf 认为前两个字节字符的第二个字节实际上是空终止符。

这是您使用 printf 时遇到的那种问题,它当然没有类型安全性。由于您使用的是 C++,因此可能值得切换到基于 iostream 的 I/O。

但是,如果你想使用 ANSI 文本,正如你在评论中指出的那样,那么最简单的解决方案是使用结构的 ANSI DEVMODEA 版本和相应的 A 版本,例如EnumDisplaySettingsADeviceCapabilitiesA

关于c++ - dmDeviceName 只是 'c',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7792163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com