printf,sprintf,snprintf,vsprintf等函数的差别

参考链接
https://blog.csdn.net/imhikaru/article/details/116163112

b3f4c410-ee90-4128-8b1d-d331b635c295

  1. 在支持snprintf的编译器里边,只使用snprintf,如果buffer的长度不够存放,则会被截断,buffer里边的字符串带结束符。
  2. 有标准库函数的,尽量使用标准库函数,便于移植。
  3. 函数开头带 _ 表示不是标准库实现,是微软自己实现的。结果带 _s 表示安全版本,避免错误的写入其他的内存区域。
函数定义说明
printfint printf(
 const char *format,
 …)
标准库<stdio.h>
发送格式化输出到标准输出 stdout
不用解释,最常用的函数
sprintfint sprintf(
 char *str,
 const char *format,
 …)
标准库<stdio.h>
发送格式化输出到字符串
跟上一个函数的差别就是,上一个函数是输出到标准输出,这个函数是输出到一个字符串,注意:这个函数不会(也无法)检查写入的长度,所以如果写入超过了长度,其他内存的地址可能被改写,所以是不安全的。
sprintf_sint sprintf_s(
 char *buffer,
 size_t sizeOfBuffer,
 const char *format [, argument] … );
不是标准库
因为可能会写入其他的内存地址,所以上一个函数不安全,这个函数是上一个的安全版本,差别就是增加了一个size,写入数据长度不能超过size,如果超过size会报错。
不推荐使用
snprintfint snprintf (
 char * str,
 size_t size,
 const char * format,
 … )
标准库<stdio.h>
跟上个函数参数一样,差别就是,上一个函数超过长度直接报错,这个函数超过长度会截断,不会报错
推荐使用
_snprintfint _snprintf(
 char *buffer,
 size_t count,
 const char *format [, argument] … );
跟上一个函数snprintf差不多,唯一差别就是缓冲区是不带结束符的。
不推荐使用
vsprintfint vsprintf(
 char *str,
 const char *format,
  va_list arg)
标准库<stdio.h>
跟sprintf类似,差别就是sprintf使用的是可变参数,而vsprintf使用的是va_list
vsnprintfint vsnprintf (
 char * s,
 size_t n,
 const char * format,
 va_list arg )
标准库<stdio.h>
跟上一个函数类似,差别是增加了一个长度参数
推荐使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值