strncpy与snprintf 的用法比较
2019/7/10 23:24:08
本文主要是介绍strncpy与snprintf 的用法比较,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
strncpy的正确用法:
strncpy(dest, src, sizeof(dest));
dest[sizeof(dest)-1] = ‘\0';
snprintf的正确用法:
snprintf(dest, sizeof(dest), "%s", src);
strncpy的问题:
1.size一定要用sizeof(dest)或sizeof(dest)-1,不可误用sizeof(src).
2.手工填0. 务必要把dest的最后一个字节手工设置为0. 因为strncpy仅在src的长度小于dest时,对剩余的字节填0.
3.性能问题。当dest长度远大于src时,由于strncpy会对多余的每个字节填0,会有很大的性能损失。
4.返回值。strncpy返回dest,因而无法知道拷贝了多少个字节。
snprintf的问题:
1.不可省略第三个参数"%s",隐患是,如果src中包含%,会引发core。
2.性能问题。当src长度远大于dest时,由于snprintf要返回src的字节数,需要扫描src,会有很大的性能损失。
3.返回值。如果当前buf够用,返回实际写入的字符数;如果不够用,返回将要写入的字符数。换句话说,返回值就是传入的字符数目。
总结:
1.snprintf使用比strncpy简洁。
2.snprintf可以获取被拷贝的字节数。
3.二者都有性能问题。如果src远大于dest,用strncpy;如果dest远大于src,用snprintf。
这篇关于strncpy与snprintf 的用法比较的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享