StringcbCopyN

来源:互联网 发布:改进的区域增长算法 编辑:程序博客网 时间:2024/06/02 02:07
概述:
StringCbCopyN 是用以替代与strncpy, StringCbCopyN 拷贝一个给定字节数目的源字符串到目标字符串。通过给定目标缓冲区的大小以确保StringCbCopyN不对目标缓冲区越界问,避免缓冲区溢出等安全问题。

函数原型:
HRESULT StringCbCopyN(  __out  LPTSTR pszDest,// 目标缓冲区指针  __in   size_t cbDest,//目标缓冲区大小  __in   LPCTSTR pszSrc,  __in   size_t cbSrc);

参数:
pszDest [out]
LPTSTR

指向目标缓冲区,用于接收拷贝字符串。

cbDest [in]
size_t

目的缓存区的大小,字节为单位。它必足够大以便能接收拷贝字符串(pszSrc 与 sbsrc 中较小的那个 ),它包含了字符串的结束符'\0', 该值最大可取STRSAFE_MAX_CCH * sizeof(TCHAR)

pszSrc [in]
LPCTSTR

指向源字符串的目标缓冲区,源字串必须包含结束符。

cbSrc [in]
size_t

源字符串到拷贝到目的字符串的字节数。

返回值:
HRESULT
 strncpy 相对应,该函数返回一个HRESULT 值, 它是一个指针,强烈建议使用宏 SUCCEEDED and FAILED  测试该函数返回值。
S_OK:源字符串非空,向目的字串拷贝中没有截断源字符串,且以字符串终止符结束。
STRSAFE_E_INVALID_PARAMETER:目标缓冲区大小要么是0,要么大于最大允许值(STRSAFE_MAX_CCH * sizeof(TCHAR))
STRSAFE_E_INSUFFICIENT_BUFFER :目标缓存区不够大,字符串被截断

注意:
该函数提供了额外的代码适当地处理缓冲区。如果没有缓冲区处理,则会涉及许多安全问题,包括缓冲区溢出。
该函数总是以终止符结束,且确保目的缓冲区大小不为0。
StringCbCopyN 是一个通用的函数形式,针对ansi 与unicode 分别有StringCbCopyNA 与 StringCbCopyNA 版本。
虽然StringCbCopyN是strncpy是替代版,但它们是有区别的,当cbSrc 比 pszSrc 所包含的字节数目值大时,它不像strncpy函数那样会在源字符串拷贝
结束后通过用null 结束符填充剩下的空间。
StringCbCopyN无法保证源字串与目的字符串两者之间出现重叠情况下的拷贝行为。
pszSrc 与 pszDest 必须 为非空。
StringCbCopyNEx  函数用于返回拷贝后的指向目的字符串的指针。


int _tmain(int argc, _TCHAR* argv[]){char des[5] = {0};char src[20] = {"hello world"};int nLen = strlen(src);strncpy(des,src, nLen);printf("Called  strncpy()..The des string is = %s \n",des);StringCbCopyNA(des,5,src,nLen);printf("Called  StringCbCopyNA()..The des string is = %s \n",des);system("pause");return 0;}



0 0