vsnprintf()函数 & vfprintf()函数

vsnprintf()函数 & vfprintf()函数

2017年12月10日 10:15:34 记得北海有墓碑 阅读数:4066

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37824129/article/details/78763286

注:带颜色的部分文本是转发者自己加的,仅供参考。

vsnprintf函数

头文件:#include  <stdarg.h>

函数原型:int vsnprintf(char *str, size_t size, const char *format, va_list ap);

函数说明:将可变参数格式化输出到一个字符数组

参数:str输出到的数组,size指定大小,防止越界,format格式化参数,ap可变参数列表函数用法

 

举例:

 #include <stdio.h>
 #include <stdarg.h>
  
void test(const char * format, ...);
  
int main(void)
{
     test("%d_%s", 6, "abc");

 

     return 0;
}
 
void test(const char * format, ...//此函数的任务时是完成把程序员想输入的n个参数(可能是整形6,字符串"abcd",小数5.6等)

                                                   //按照对应的格式化字符的格式(譬如:%d_%s_%f)一次存入到一个字符数组char buff[4069]中

                                                     //并将这些字符使用printf("%s\n", buff)打印出来,譬如:6_abcd_5.6,

    
{
     char buf[4069];

     va_list list;

 
     va_start(list, format);
 
     vsnprintf(buf, 4069, format, list);
 
     va_end(list);
 
     printf("%s\n", buf);
 } 

 

输出结果为:6_abc

 

       

vfprintf()函数

头文件:#include  <stdarg.h>

函数原型: int vfprintf(FILE *stream, const char *format, va_list arg);

函数说明:fprintf()会根据参数format字符串来转换并格式化数据,然后将结果输出到参数stream指定的文件中,直到出现字符串结束(‘\0’)为止。

 

 

C语言printf家族函数的成员:

 

#include <stdio.h>

 

int printf(const char *format, ...); //输出到标准输出

int fprintf(FILE *stream, const char *format, ...); //输出到文件

int sprintf(char *str, const char *format, ...); //输出到字符串str中

int snprintf(char *str, size_t size, const char *format, ...);

                                     //按size大小输出到字符串str中

  

以下函数功能与上面的一一对应相同,只是在函数调用时,把上面的...对应的一个个变量用va_list调用所替代。在函数调用前ap要通过va_start()宏来动态获取,不能往里使用va_end(ap)释放前面定义的指针。va_start(list, format)是一个通过定义的变参指针ap和变参前面的固定参数名来获取待输入的第一个变参的地址即调用函数 test("%d_%s", 6, "abc");时第一个变参6在栈中的内存地址,顺便说一下"%d_%s"是变参列表中的前面的一个参数,它对应的函数test定义时void test(const char * format, ...)的const char *format这一项,即三个点...前面的那个参数。vsnprintf()函数的作用是获取程序员调用函数时输入几个变参后(当然变参之间用逗号隔开),将这些变参作为字符存储到一个字符数组buff[]中,函数的返回值就是这些字符的个数(因为vsnprintf返回值是int类型),可以写成int i = vsnprintf();因为此函数中使用了定义的字符数组buff[],所以在函数vsnprintf()中可以使用printf("%s", buff)打印程序员输入的变参的内容(实际上可以叫打印程序员输入的用逗号间隔的所有字符的内容,逗号不会打印出来,这里的函数vsnprintf()的作用有点像va_art(ap, t)的作用:获取第一个变参t的地址对应的内容,然后将指针ap指向下一个变参。)

 

#include <stdarg.h>

 

int vprintf(const char *format, va_list ap);

int vfprintf(FILE *stream, const char *format, va_list ap); 

int vsprintf(char *str, const char *format, va_list ap);

int vsnprintf(char *str, size_t size, const char *format, va_list ap);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值