printf,sprintf,vsprintf,vsnprintf的区别

本文详细介绍了C语言中printf、sprintf和vsprintf的区别和用途。printf用于标准输出,将格式化的字符串输出到屏幕;sprintf则将格式化的输出保存到指定的字符串缓冲区中,不直接输出;vsprintf与sprintf类似,但接受一个va_list类型的参数,提供更灵活的可变参数处理。通过对这几个函数的理解,可以更好地掌握C语言中的格式化输出和内存缓冲区操作。

最熟悉的不用说就是printf了,居然有了printf为什么还要有别的输出函数哪?当然是因为有不同的用途。

1.printf和sprintf的区别

先看看两个函数的原型

/* Write formatted output to stdout.  */
extern int printf (const char *__restrict __format, ...);
/* Write formatted output to S.  */
extern int sprintf (char *__restrict __s,
		    const char *__restrict __format, ...) __THROWNL;

sprintf比printf多了一个参数,也就是第一个参数char __restrict __s,其实就是个char类型的字符串。而且源码注释也解释的非常清楚——Write formatted output to S.也就是结果会保存到用户传入的第一个字符串参数里面。相对于是一个缓存。而printf源码注释也解释的非常清楚——Write formatted output to stdout.——是直接输出到stdout,也就是标准输出。

看下面的例子就能明白sprintf的用法:

int main(int argc, char *argv[]) {
   
   
    char buff[15];
    int a=10;
    sprintf(buff,"sprintf %d\n",a);
    return 0;
}

输出:

buff size 11

通过调用sprintf后,buff里面确实有值了,而且size是11。而且不会把buff的内容输出到屏幕(标准输出stdout)上。写到这sprintf的语法已经全部讲完了,sprintf唯一的作用就是向char *buff里面写内容。不输出我怎么知道里面有内容呢?你可以debug,也可以用printf输出,但是对于后者,可能是多此一举。看下面的例子

int main(int argc, char *argv[]) {
   
   
    char buff[15];
    int a=10<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值