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