RtlStringCbPrintfW (swprintf의 안전한 버전)을 사용하려고 시도 중이며 문자열에 int를 추가 할 때 예기치 않은 결과가 발생합니다. int - all 뒤에 동일한 문자열을 추가하면. 그래서 내 코드는 다음과 같습니다swprintf 예기치 않은 결과가
WCHAR buffer[256];
LPCWSTR pszFormat = L"%s %d";
WCHAR* pszTxt = dataPath.Buffer;//*
status = RtlStringCbPrintfW(buffer, sizeof(buffer), pszFormat, pszTxt, 1);
- 데이터 경로는 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로 자동 처리되지 않아야합니까?
왜 이것이 작동하지 않습니까? RtlStringCbPrintfW (버퍼 \t \t \t를 sizeof (버퍼) \t \t \t L "%. * S %의 S" \t \t \t dataPath.Length, \t \t \t dataPath.Buffer, \t \t \t L "\ \ "); ..L "\\"은 null로 끝납니다 –
wprk가 아닌 것은 무엇입니까? 'buffer'의 가치는 무엇입니까? –
"\ Device \ HarddiskVolume2 \ foo \ Data ?? C ???"와 유사합니다. . 나는 정확한 답을 발견했다. UNICODE_STRING에 대한 spetial parametr % wZ가있다. 작동한다. 그래서 해결된다. –