StringCbCat和StringCchCat API有什么区别?

3

StringCbCat: http://msdn.microsoft.com/en-us/library/windows/desktop/ms647495%28v=vs.85%29.aspx

StringCchCat: http://msdn.microsoft.com/en-us/library/windows/desktop/ms647518%28v=vs.85%29.aspx

我正在编写一个 C++ 程序来处理 TCHAR 字符串。我发现了这两个 Windows API,一个是 StringCbCat,另一个是 StringCchCat。它们都似乎能够为 TCHAR 字符串执行 strcat() 函数。但如果它们是相同的,为什么要给它们两个不同的名称?我尝试使用 Google 但没有找到答案。

有人知道它们是否有区别吗?还是它们只是相同的?

PS. 对于其他 StringCbxxx 和 StringCchxxx 函数(如 StringCbLength 和 StringCchLength),情况也是相同的。


1
顺便提一下,“StrSafe” API现在已经被“Secure CRT”所取代,因此您应该使用strcat_s()。或者更好的是,您应该使用wcscat_s(),因为ASCII和TCHAR也已经被弃用,而UNICODE则得到了推荐。在针对未实现“Secure CRT”函数的非Microsoft平台时,StrSafe仍然可以派上用场。 - Chuck Walbourn
1个回答

11

StringCbCat::

cbDest [in] 类型:size_t 目标缓冲区的大小(以字节为单位)。允许的最大字节数为 STRSAFE_MAX_CCH * sizeof(TCHAR)。

示例:

WCHAR wszTemp[10] ;
DWORD dwNumberOfBytes = 10 * sizeof(WCHAR) ;
// 10 * 2 = 20 Bytes. 
// 1 [WCHAR][2] takes 2 Bytes

StringCchCat::

cchDest [in] 类型:size_t 目标缓冲区的大小,以字符为单位。允许的最大字符数是STRSAFE_MAX_CCH。

示例:

WCHAR wszTemp[10] ;
DWORD dwNumberOfCharacters = _countof(wszTemp) ;
// 10 Characters. 
// 1 [WCHAR][2] takes 2 Bytes that defines 1 character in UNICODE.

哦,我真蠢,没看出来区别。谢谢,老兄! - Leon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接