strncpy的正确用法: strncpy(dest, src, sizeof(dest)); dest[sizeof(dest)-1] = ‘\0’; snprintf的正确用法: snprintf(dest, sizeof(dest), "%s", src); strncpy的问题: - size一定要用sizeof(dest)或sizeof(dest)-1,不可误用sizeof(src).
- 手工填0. 务必要把dest的最后一个字节手工设置为0. 因为strncpy仅在src的长度小于dest时,对剩余的字节填0.
- 性能问题。当dest长度远大于src时,由于strncpy会对多余的每个字节填0,会有很大的性能损失。
- 返回值。strncpy返回dest,因而无法知道拷贝了多少个字节。
snprintf的问题: - 不可省略第三个参数"%s",隐患是,如果src中包含%,会引发core。
- 性能问题。当src长度远大于dest时,由于snprintf要返回src的字节数,需要扫描src,会有很大的性能损失。
- 返回值。如果当前buf够用,返回实际写入的字符数;如果不够用,返回将要写入的字符数。换句话说,返回值就是传入的字符数目。
总结: - snprintf使用比strncpy简洁。
- snprintf可以获取被拷贝的字节数。
- 二者都有性能问题。如果src远大于dest,用strncpy;如果dest远大于src,用snprintf。
http://dpinglee.blog.163.com/blog/static/14409775320110102950487/
|
|
|
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
---|
28 | 29 | 30 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|
导航
统计
- 随笔: 48
- 文章: 0
- 评论: 12
- 引用: 0
常用链接
留言簿(1)
随笔档案
搜索
最新评论
阅读排行榜
评论排行榜
|
|