strcpy_s使用注意事项。(能用memcpy_s的地方就不要用strcpy_s了)

strcpy_s()函数有两个版本:三个参数版本和两个参数版本,如下:
三个参数时:
errno_t strcpy_s(
char *strDestination,
size_t numberOfElements,
const char *strSource
);
两个参数时:
errno_t strcpy_s(
char (&strDestination)[size],
const char *strSource
); // C++ only

以下重点讨论三个参数版本。
使用时一定要注意:第二个参数numberOfElements一定要大于源空间strSource 的大小。否则Debug版本会弹框,release版本会直接奔溃。
比如
LPSTR l_pcDest = (char*)malloc(6);
char l_acPhyPosName[6] = { 0 };
sprintf_s(l_acPhyPosName, “HOP05”);
strcpy_s(l_pcDest, 6/这里不能为5,必须大于等于strlen(l_acPhyPosName)+1/, l_acPhyPosName);

但是,memcpy_s中的第二个参数是需要大于等于strlen(l_acPhyPosName)。(不是大于等于strlen(l_acPhyPosName)+1哦)如下:
LPSTR l_pcDest = (char*)malloc(6);
char l_acPhyPosName[6] = { 0 };
sprintf_s(l_acPhyPosName, “HOP03”);
memcpy_s(l_pcDest, 5/DestLen/, l_acPhyPosName, 5/SourceLen/);

//总结:strcpy_s与memcpy_s的区别:
//strcpy_s是字符串的拷贝,源是包括有\0的,所以目标长度一定要大于等于strlen(源)+1,而memcpy_s是内存考虑,只要目标长度大于等于源长度就可以,不需要+1. 
//所以,为了避免记混乱,能用memcpy_s的地方,就不要用strcpy_s.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值