swprintf出现意外结果
swprintf unexpected results
我正在尝试使用RtlStringCbPrintfW(swprintf的安全版本(,在将int附加到字符串时得到了意外的结果。如果我在int后面附加相同的字符串,那么一切都可以。所以我的代码:
WCHAR buffer[256];
LPCWSTR pszFormat = L"%s %d";
WCHAR* pszTxt = dataPath.Buffer;//*
status = RtlStringCbPrintfW(buffer, sizeof(buffer), pszFormat, pszTxt, 1);
- 这里的dataPath是UNICODE_STRING。所以dataPath.Buffer是PWCH
这里的缓冲区值是:buffer=wchar_t[168]"\Device\HarddiskVolume2\foo\Data??C??">
当观察缓冲区数组时,我可以看到"?"是:
0xcc00 '?'
0xcccc '?'
则在一些字节之后实际定位目标值1。dataPath.Buffer的值:
+0x048 DataPath : _UNICODE_STRING "DeviceHarddiskVolume2fooData"
+0x000 Length : 0x8c
+0x002 MaximumLength : 0x8c
+0x008 Buffer : 0xffffc000`01cd1d00 "DeviceHarddiskVolume2fooData"
那么reson,以null结尾的字符是什么呢?swprintf不应该自动正确处理吗?
链接到的UNICODE_STRING
文档指出,Buffer
不一定以null结尾,%s
格式需要以null结尾的字符串。
您可以通过指定精度来限制用%s
打印的字符串的长度:
WCHAR* pszTxt = dataPath.Buffer;
int Len = dataPath.Length;
RtlStringCbPrintfW(buffer, sizeof(buffer), L"%.*s %d", Len, pszTxt, 1);
%wZ
类型字段字符应用于UNICODE_STRING结构。
相关文章:
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 使用++运算符会导致意外的结果
- 尝试将字符串/字符转换为整数会产生意外结果
- lower_bound() 给出意外的结果
- 三元运算符在返回语句中给出意外的结果
- RapidXML - 代码创建意外结果
- 类中静态函数C++意外结果
- 模板函数意外的结果
- 指针数组中的意外结果
- 使用指针访问数组元素时出现意外结果
- 使用 sprintf 和 %g 将双精度转换为字符串的意外结果
- C++:比较运算符>和字符串文本的意外结果
- 具有意外结果的 C++ 闭包
- 操作员!! 产生意外的结果
- yaml-cpp 比较的意外结果
- Spirit X3:自定义数字解析器在结果中产生意外的前导零
- 每次都出现意外结果
- 在 Qt 中解析嵌套的 JSON 时出现意外结果(数组不存在)
- 如何避免 std::abs 的意外结果?
- 声明双重给它一个值0,但打印结果意外变化