功能:(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);
}