wchar_t*
은 포인터 일뿐입니다. wchar_t
문자가 정확히 얼마나 많은 수를 가리키는 지 디버거 (또는 wchar_t*
에 전달하는 함수)에 지시하지 않는 한, 어딘가에서 멈추어야하므로 첫 번째 null 문자에서 멈 춥니 다.
UNICODE_STRING::Buffer
은 Null 종료가 보장되지 않지만 Null이 포함될 수 있습니다. UNICODE_STRING::Length
필드를 사용하여 Buffer
에 포함 된 요소가 얼마나 많은지 알 수 있습니다 (포함 된 널 (null)은 포함하지만 후미 null 종결 자 (존재하는 경우)는 포함되지 않습니다. 널 (Null) 터미네이터가 필요하면 Buffer
데이터를 사용자의 버퍼에 복사하고 터미네이터를 추가하십시오.
#include <string>
UNICODE_STRING testStr;
// fill testStr as needed...
std::wstring wStrBuf(testStr.Buffer, testStr.Length/sizeof(WCHAR));
const wchar_t *wStr = wStrBuf.c_str();
내장 널 (null)이 여전히 존재하지만, c_str()
당신을위한 후행 null 종결을 추가합니다 :
그 작업을 수행하는 가장 쉬운 방법은 예를 들어, std::wstring
을 사용하는 것입니다.디버거은 디버거에서 데이터에있는 실제 숫자가 WCHAR
인 경우를 제외하고는 첫 번째 null까지만 데이터를 표시합니다.
#include <string>
#include <vector>
UNICODE_STRING testStr;
// fill testStr as needed...
std::vector<std::wstring> wStrArr;
std::wstring wStr(testStr.Buffer, testStr.Length/sizeof(WCHAR));
std::wstring::size_type startidx = 0;
do
{
std::wstring::size_type idx = wStr.find(L'\0', startidx);
if (idx == std::wstring::npos)
{
if (startidx < wStr.size())
{
if (startidx > 0)
wStrArr.push_back(wStr.substr(startidx));
else
wStrArr.push_back(wStr);
}
break;
}
wStrArr.push_back(wStr.substr(startidx, idx-startidx));
startidx = idx + 1;
}
while (true);
// use wStrArr as needed...
또는 :
#include <vector>
#include <algorithm>
UNICODE_STRING testStr;
// fill testStr as needed...
std::vector<std::wstring> wStrArr;
WCHAR *pStart = testStr.Buffer;
WCHAR *pEnd = pStart + (testStr.Length/sizeof(WCHAR));
do
{
WCHAR *pFound = std::find(pStart, pEnd, L'\0');
if (pFound == pEnd)
{
if (pStart < pEnd)
wStrArr.push_back(std::wstring(pStart, pEnd-pStart));
break;
}
wStrArr.push_back(std::wstring(pStart, pFound-pStart));
pStart = pFound + 1;
}
while (true);
// use wStrArr as needed...
당신이
Buffer
데이터가 널 (null)로 구분 된 여러 문자열을 포함 알고있는 경우또는, 당신은 대신 문자열의 배열로 예를
Buffer
데이터를 분할에 선택적으로 수 어떤 인코딩에서 유니 코드 문자열입니까? – 2501그래서 [이중 null로 끝나는 문자열] (https://blogs.msdn.microsoft.com/oldnewthing/20091008-00/?p=16443)이 있습니다. 그다지 드물지 않다. –
종료 문자로 '0'을 사용하는 모든 문자열 시스템에서 작동합니다. –