CString
의 소스 코드를 MFC에서 읽습니다. 나는 생성자 CString::CString(LPCTSTR lpsz)
의 구현 방법에 대해 매우 궁금하다. 나의 이해에서왜 CString (LPCTSTR lpsz) 생성자가 lpsz의 상위 2 바이트를 확인합니까?
, lpsz
로 표시되는 문자열을 복사하기 전에, 그것은 단지 lpsz
가 HIWORD(lpsz)
가 NULL
경우 확인과 결합하는 NULL
하지만 필요가 없습니다 여부를 확인해야합니다.
MFC 사람이 여기를 지나가고 설명을 기꺼이 보내고 있습니까?
CString::CString(LPCTSTR lpsz)
{
Init();
if (lpsz != NULL && HIWORD(lpsz) == NULL)
{
UINT nID = LOWORD((DWORD)lpsz);
if (!LoadString(nID))
TRACE1("Warning: implicit LoadString(%u) failed\n", nID);
}
else
{
int nLen = SafeStrlen(lpsz);
if (nLen != 0)
{
AllocBuffer(nLen);
memcpy(m_pchData, lpsz, nLen*sizeof(TCHAR));
}
}
}
그러나 HIWORD를 확인할 때 lpsz가 null인지 확인하지 않습니다. – ralphtheninja
어떻게됩니까? 'If (lpsz! = NULL && HIWORD (lpsz) == NULL)'처음에 lpsz가 NULL인지 아닌지 검사하고, HIWORD를 확인합니다. – MikMik