使用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);
}
- 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);
}
相关文章推荐
- java二维数组的使用需要注意的地方
- hadoop中Combiner使用中需要注意的地方
- spring-data-redis 使用过程中需要注意的地方
- [js高手之路]使用原型对象(prototype)需要注意的地方
- Android AsyncTask 使用时需要注意的地方
- js使用原型对象(prototype)需要注意的地方
- 使用ireport+jasperreports生成报表时需要注意的地方
- struts2.5使用通配符需要注意的地方
- sqlDataReader使用需要注意的地方
- android使用google gcm接收push消息需要注意的地方
- 使用TFS需要注意的地方
- sql server中使用组合索引需要注意的地方
- [js高手之路]使用原型对象(prototype)需要注意的地方
- Activity启动模式以及在使用时需要注意的地方
- PHP IN_ARRAY 函数 使用需要注意的地方
- 使用Java中的final变量需要注意的地方
- sql server中使用组合索引需要注意的地方
- 使用qeeke主题需要注意的地方
- 使用jquery的ajax需要注意的地方dataType的设置
- iOS 不使用nib文件需要注意的地方