[原创]snprintf与strncpy效率对比

本文通过测试比较snprintf和strncpy在不同场景下的效率。结果显示,当源串和目标串长度相同时,两者效率接近;源串长度小于目标串时,snprintf更优;源串长度大于目标串时,strncpy更优。建议根据具体情况进行选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

一直以为strncpy效率优于snprintf. 无意中在网上看到snprintf效率大于strncpy,颇感震惊. 网址如下:

http://blog.youkuaiyun.com/wavemoon/archive/2009/12/06/4952904.aspx

 

后自己编码测试了下,发现情况复杂,并不是如此.

 

现在帖上我的测试:

 

环境: linux

编译器:g++

 

代码:

 

 

 

输出:

 

copy 102400 to 102400
snprintf time used: 455
strncpy time used: 938


copy 10240 to 10240
snprintf time used: 42
strncpy time used: 94


copy 1024 to 1024
snprintf time used: 6
strncpy time used: 10


copy 64 to 64
snprintf time used: 2
strncpy time used: 1


copy 8 to 8
snprintf time used: 2
strncpy time used: 1


copy 1024 to 10240
snprintf time used: 6
strncpy time used: 104


copy 10240 to 1024
snprintf time used: 1234
strncpy time used: 10


copy 24 to 1024
snprintf time used: 2
strncpy time used: 11


copy 1024 to 24
snprintf time used: 136
strncpy time used: 1

 

 

分析:

1. 在源串长度和目标串长度一样大的情况下,效率几乎相同. 在一个数量级上. 因为在linux下snprintf末尾会有'/0'.所以这时推荐使用snprintf

2. 源串长度 < 目标串长度    snprintf效率领先一个级别, 这时推荐使用snprintf

3. 源串长度 > 目标串长度     strncpy效率领先一个级别, 这时推荐使用strncpy

 

 

结论:

1.在源串长度 远大于 目标串长度(至少几倍). 且效率重要的时候. 考虑使用strncpy(这时别忘了在末尾加'/0')

2.其他情况推荐使用snprintf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值