使用strncpy需要注意的地方

本文详细介绍了C/C++中strncpy函数的功能、使用方法及常见问题,包括如何正确处理字符串边界、避免越界错误,并提供了一个封装函数safe_strncpy来简化使用流程。同时强调了在使用后手动添加终止符的重要性。

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

功能:(c/c++)复制src中的内容(字符,数字、汉字....)到dest,复制多少由num的值决定,返回指向dest的指针。如果遇到null字符('\0'),且还没有到num个字符时,就用(num - n)(n是遇到null字符前已经有的非null字符个数)个null字符附加到destination。注意:并不是添加到destination的最后,而是紧跟着由source中复制而来的字符后面。
综上,一般情况下,使用strncpy时,建议将n置为dest串长度(除非你将多个src串都复制到dest数组,并且从dest尾部反向操作),复制完毕后,为保险起见,将dest串最后一字符置NULL

例:

char *pszServerMsg = new char[nFileSize+1];

memset(pszServerMsg,0,nFileSize + 1);

……(pszServerMsg的赋值)

pszServerMsg[nFileSize] = NULL;



strncpy是不会帮你在目标字串后面加0的,

所以用完strncpy不手动在后面加零的话,就会出错,一定要注意。

加零的方法有2个,

一是拷贝前,用ZeroMemory()把整个缓冲区置0。

二是计算好字串的实际长度,手动加0。


对于第二种方法,看到别人写的一个函数对strncpy函数封装,这样觉得不错,记下。

char *safe_strncpy(char *dst, const char *src, size_t size)
{   
    dst[size-1] = '/0';
    return strncpy(dst,src,size-1);   
}

 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值