strncpy和snprintf的正确用法详解
2017-11-24 14:06
246 查看
strncpy 原型 :
char *strncpy(char *s2, const char *s1, size_t n);
strncpy的正确用法:
strncpy(dest, src, sizeof(dest));
dest[sizeof(dest)-1] = ‘\0’;
snprintf 原型 :
int snprintf(char *str, size_t size, const char *format, …);
stdio.h头文件;
将可变个参数(…)按照format格式化成字符串,然后将其复制到str中
(1) 如果格式化后的字符串长度 小于 size,则将此字符串全部复制到str中,并给其后添加一个字符串结束符(‘\0’);
(2) 如果格式化后的字符串长度 大于等于 size,则只将其中的(size-1)个字符复制到str中,并给其后添加一个字符串结束符(‘\0’),就是说,拷贝的长度是size-1和源字符串长度的最小值;
(3)返回值为欲写入的字符串长度,而非写入的实际长度。若出错则返回负值。
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的字节数(参见:http://blog.bitfly.cn/post/c-safe-str-cpy/),需要扫描src,会有很大的性能损失。
返回值。如果当前buf够用,返回实际写入的字符数;如果不够用,返回将要写入的字符数。换句话说,返回值就是传入的字符数目。
总结:
snprintf使用比strncpy简洁。
snprintf可以获取被拷贝的字节数。
二者都有性能问题。如果src远大于dest,用strncpy;如果dest远大于src,用snprintf。
==================== 结尾 ====================
作者: bitfly. 转载请注明来源或包含本信息. 谢谢
链接: http://blog.bitfly.cn/post/strncpy-vs-snprintf/
char *strncpy(char *s2, const char *s1, size_t n);
strncpy的正确用法:
strncpy(dest, src, sizeof(dest));
dest[sizeof(dest)-1] = ‘\0’;
snprintf 原型 :
int snprintf(char *str, size_t size, const char *format, …);
stdio.h头文件;
将可变个参数(…)按照format格式化成字符串,然后将其复制到str中
(1) 如果格式化后的字符串长度 小于 size,则将此字符串全部复制到str中,并给其后添加一个字符串结束符(‘\0’);
(2) 如果格式化后的字符串长度 大于等于 size,则只将其中的(size-1)个字符复制到str中,并给其后添加一个字符串结束符(‘\0’),就是说,拷贝的长度是size-1和源字符串长度的最小值;
(3)返回值为欲写入的字符串长度,而非写入的实际长度。若出错则返回负值。
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的字节数(参见:http://blog.bitfly.cn/post/c-safe-str-cpy/),需要扫描src,会有很大的性能损失。
返回值。如果当前buf够用,返回实际写入的字符数;如果不够用,返回将要写入的字符数。换句话说,返回值就是传入的字符数目。
总结:
snprintf使用比strncpy简洁。
snprintf可以获取被拷贝的字节数。
二者都有性能问题。如果src远大于dest,用strncpy;如果dest远大于src,用snprintf。
==================== 结尾 ====================
作者: bitfly. 转载请注明来源或包含本信息. 谢谢
链接: http://blog.bitfly.cn/post/strncpy-vs-snprintf/
相关文章推荐
- strncpy和snprintf的正确用法详解
- strncpy和snprintf的正确用法详解
- <摘自网上>strncpy和snprintf的正确用法详解
- strncpy与snprintf的正确用法
- 转载~kxcfzyk:Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解
- strncpy与snprintf 的用法比较
- strncpy&snprintf用法之比较
- SQL语句详解 MySQL update的正确用法
- linux cksum命令参数及用法详解---检查文件的CRC是否正确
- SQL语句详解 MySQL update的正确用法
- 详解Spring Data Jpa 模糊查询的正确用法
- Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解
- UITabBarController 详解之 hidesBottomBarWhenPushed的正确用法
- oracle 分组函数与group by正确用法详解与详细解释
- strncpy,snprintf,strnlen的用法
- strcpy ,strncpy ,strlcpy, snprintf, memcpy 用法、区别和效率
- strncpy,snprintf,strnlen的用法
- 批处理之 正确使用for语句 以及!errorlevel!、%errorlevel% 与 DelayedExpansion用法详解
- C语言 第 1 节 strncpy和snprintf用法总结
- _snprintf_s()函数的正确用法