- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 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 版本,例如
EnumDisplaySettingsA
,DeviceCapabilitiesA
。
关于c++ - dmDeviceName 只是 'c',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7792163/
我正在尝试使用 DEVMODE.dmDeviceName 获取每台显示器的名称: dmDeviceName A zero-terminated character array that specifi
我是一名优秀的程序员,十分优秀!