StringcbCopyN

本文详细介绍了C语言中用于字符串安全拷贝的函数StringcbCopyN,包括其用法、参数解释及注意事项,帮助读者理解和掌握如何在程序中正确使用该函数进行字符串操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述:
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;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值