- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
StringCchCopyEx
函数具有值 STRSAFE_NULL_ON_FAILURE
和 STRSAFE_NO_TRUNCATION
用于自己的标志。我正在阅读MSDN我看不出它们的区别:
STRSAFE_NULL_ON_FAILURE
If the function fails, pszDest is set to an empty string (
TEXT("")
). In the case of aSTRSAFE_E_INSUFFICIENT_BUFFER
failure, any truncated string is overwritten.STRSAFE_NO_TRUNCATION
As in the case of
STRSAFE_NULL_ON_FAILURE
, if the function fails, pszDest is set to an empty string (TEXT("")
). In the case of aSTRSAFE_E_INSUFFICIENT_BUFFER
failure, any truncated string is overwritten.
我也没有看到我的代码结果有什么不同:
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
值有何区别?
最佳答案
一个带有令人困惑的文档的安全字符串函数,可能会出什么问题?两者之间的区别恰恰是当您还使用带有非零填充符的 STRSAFE_FILL_ON_FAILURE 时写入零终止符的位置:
请注意填料工作方式中的缺陷。令人困惑的文档背后的可能原因。它只能是 0 到 255 之间的值,当然只有 StringCchCopyExA() 才能真正正常工作。 Unicode 版本将在您的情况下生成中文“塘塘塘塘”,几乎迫使您使用 0 作为填充符。在这种情况下,确实没有区别,文档也足够准确。
关于c++ - `STRSAFE_NO_TRUNCATION` 和 `STRSAFE_NULL_ON_FAILURE` 值有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33434131/
StringCchCopyEx 函数具有值 STRSAFE_NULL_ON_FAILURE 和 STRSAFE_NO_TRUNCATION 用于自己的标志。我正在阅读MSDN我看不出它们的区别: ST
我是一名优秀的程序员,十分优秀!