您的位置:首页 > 其它

使用strncpy需要注意的地方

2013-10-17 10:59 218 查看
功能:(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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: