C++ StringCbCat和StringCchCat API之间有什么区别

C++ StringCbCat和StringCchCat API之间有什么区别,c++,winapi,visual-c++,C++,Winapi,Visual C++,StringCbCat: StringCchCat: 目前我正在编写一个C++程序来处理TCHAR字符串。我发现这两个Windows API,一个是StringCbCat,另一个是StringCchCat。它们似乎都能够为TCHAR字符串执行strcat()函数。但是如果他们是一样的,为什么给他们两个不同的名字呢?我试过谷歌,但没有成功 有人知道这有什么不同吗?还是它们都一样 其他StringCbxxx和StringCchxxx函数,如StringCbLength和StringCchLength

StringCbCat: StringCchCat:

目前我正在编写一个C++程序来处理TCHAR字符串。我发现这两个Windows API,一个是StringCbCat,另一个是StringCchCat。它们似乎都能够为TCHAR字符串执行strcat()函数。但是如果他们是一样的,为什么给他们两个不同的名字呢?我试过谷歌,但没有成功

有人知道这有什么不同吗?还是它们都一样

其他StringCbxxx和StringCchxxx函数,如StringCbLength和StringCchLength,也是如此:

cbDest[in]类型:大小\u t目标缓冲区的大小,in 字节。最大数量的 允许的字节数为STRSAFE_MAX_CCH*sizeof(TCHAR)

例如:

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

cchDest[in]类型:大小\t目标缓冲区的大小,in 字符。最大字符数 允许为STRSAFE_MAX_CCH

例如:

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

哦,愚蠢的我,没有看到区别。谢谢你,伙计!顺便说一句,“StrSafe”API最近被弃用,取而代之的是“安全CRT”,因此您应该使用strcat_s()。或者更确切地说,您应该使用wcscat_s(),因为ASCII和TCHAR现在也不赞成使用UNICODE。StrSafe对于针对未实现“安全CRT”功能的非Microsoft平台仍然有用。