【发布时间】:2014-07-09 10:46:04
【问题描述】:
我正在尝试使用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 "\Device\HarddiskVolume2\foo\Data"
+0x000 Length : 0x8c
+0x002 MaximumLength : 0x8c
+0x008 Buffer : 0xffffc000`01cd1d00 "\Device\HarddiskVolume2\foo\Data"
那么,什么是 reson,null 终止字符?不应该用 swprintf 自动正确处理吗?
【问题讨论】: