對於自己的標誌,StringCchCopyEx
函數的值爲STRSAFE_NULL_ON_FAILURE
和STRSAFE_NO_TRUNCATION
。我讀MSDN,我看不出他們的區別:STRSAFE_NO_TRUNCATION和STRSAFE_NULL_ON_FAILURE值有什麼區別?
STRSAFE_NULL_ON_FAILURE
如果函數調用失敗,pszDest被設置爲空字符串(
TEXT("")
)。 如果STRSAFE_E_INSUFFICIENT_BUFFER
失敗,則會覆蓋所有截斷的 字符串。STRSAFE_NO_TRUNCATION
如在
STRSAFE_NULL_ON_FAILURE
的情況下,如果函數調用失敗, pszDest被設置爲空字符串(TEXT("")
)。在STRSAFE_E_INSUFFICIENT_BUFFER
失敗的情況下,覆蓋任何截斷的字符串 。
此外,我不看我的代碼結果的差異:
LPCTSTR pSrc = L"ASDFGHJK";
size_t charsCount = 5;
size_t buffer_size = charsCount * sizeof(TCHAR);
TCHAR *buffer = (TCHAR *) malloc(buffer_size);
ZeroMemory(buffer, buffer_size);
// Now I generate the STRSAFE_E_INSUFFICIENT_BUFFER result...
LPTSTR pDestEnd = NULL;
size_t remaind = 0;
// The MEMORY content after the StringCchCopyEx executing:
// 00 00 53 00 44 00 46 00 00 00 fd fd fd fd ab ab ab ab ab
// DWORD dwFlags = STRSAFE_FILL_BYTE('X') | STRSAFE_NO_TRUNCATION;
// The MEMORY content after the StringCchCopyEx executing:
// 00 00 53 00 44 00 46 00 00 00 fd fd fd fd ab ab ab ab ab
DWORD dwFlags = STRSAFE_FILL_BYTE('X') | STRSAFE_NULL_ON_FAILURE;
HRESULT result = StringCchCopyEx(buffer, charsCount, pSrc, &pDestEnd, &remaind, dwFlags);
對於這兩種情況下,內存具有相同的內容...什麼的STRSAFE_NO_TRUNCATION
和STRSAFE_NULL_ON_FAILURE
值的差異?