gpt4 book ai didi

c++ - `STRSAFE_NO_TRUNCATION` 和 `STRSAFE_NULL_ON_FAILURE` 值有什么区别?

转载 作者:太空狗 更新时间:2023-10-29 23:00:33 24 4
gpt4 key购买 nike

StringCchCopyEx 函数具有值 STRSAFE_NULL_ON_FAILURESTRSAFE_NO_TRUNCATION 用于自己的标志。我正在阅读MSDN我看不出它们的区别:

STRSAFE_NULL_ON_FAILURE

If the function fails, pszDest is set to an empty string (TEXT("")). In the case of a STRSAFE_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 a STRSAFE_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_TRUNCATIONSTRSAFE_NULL_ON_FAILURE 值有何区别?

最佳答案

一个带有令人困惑的文档的安全字符串函数,可能会出什么问题?两者之间的区别恰恰是当您还使用带有非零填充符的 STRSAFE_FILL_ON_FAILURE 时写入零终止符的位置:

  • 如果您想在结果字符串中看到填充符,请使用 STRSAFE_NO_TRUNCATION,零写在末尾。
  • 使用 STRSAFE_NULL_ON_FAILURE 总是得到一个空字符串。填充符仍然写入,但超过了 0。

请注意填料工作方式中的缺陷。令人困惑的文档背后的可能原因。它只能是 0 到 255 之间的值,当然只有 StringCchCopyExA() 才能真正正常工作。 Unicode 版本将在您的情况下生成中文“塘塘塘塘”,几乎迫使您使用 0 作为填充符。在这种情况下,确实没有区别,文档也足够准确。

关于c++ - `STRSAFE_NO_TRUNCATION` 和 `STRSAFE_NULL_ON_FAILURE` 值有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33434131/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com