vsnprintf的作用和使用

  vsnprintf用来将可变参数格式化输出到一个字符数组,常和va_start和va_end一起使用。

vsnprintf函数介绍

函数功能:将可变参数格式化输出到一个字符数组。

注意:
在linux环境下是:vsnprintf
但在VC6环境下是:_vsnprintf

头文件:#include <stdarg.h>
函数声明:int vsnprintf(char *str, size_t size, const char *format, va_list ap);
参数:

  • str
    保存输出字符数组的存储区。

  • size
    存储区的大小。

  • format
    包含格式字符串的C字符串,其格式字符串与printf中的格式相同

  • arg
    变量参数列表,用va_list 定义。

返回值:
执行成功,返回最终生成字符串的长度,若生成字符串的长度大于size,则将字符串的前size个字符复制到str,同时将原串的长度返回(不包含终止符);执行失败,返回负值,并置errno.

使用例子

#include <stdio.h>
#include <stdarg.h>

#define MAXLEN 20
char buffer[MAXLEN];

int mon_log(char* format, ...)
{
    int i=0,j=0;
    va_list vArgList;                           
    va_start (vArgList, format);      	
    i=_vsnprintf(buffer, MAXLEN, format, vArgList);/*把可变参数表中的数据转成字符存到buffer中,每个参数间用','隔开 */ 
    va_end(vArgList);                            

    printf("%s\r\n", buffer);   

    for(j=0;j<MAXLEN;j++)  /*打印buffer中每个字符的值 */
    {
        printf("%d  ", buffer[j]);
    }
    printf("\r\n");
    return i;
}

void main()
{   
	int i;

	for(i=0;i<MAXLEN;i++)
		buffer[i]=100;

    i=mon_log("%s,%d,%d,%c","abc",2,3,'4');    
    printf("return value1=%d\r\n\r\n",i);

    i=mon_log("para1:%s,%d,%d,%c","123",2,3,'4');    
    printf("return value2=%d\r\n\r\n",i);

    i=mon_log("%s,%d,%d,last=%c\r\n","abc",2,3,'4');    
    printf("return value3=%d\r\n\r\n",i);
}

  在vc6中运行后的结果:

abc,2,3,4
97  98  99  44  50  44  51  44  52  0  100  100  100  100  100  100  100  100  100  100
return value1=9

para1:123,2,3,4
112  97  114  97  49  58  49  50  51  44  50  44  51  44  52  0  100  100  100  100
return value2=15

abc,2,3,last=4

97  98  99  44  50  44  51  44  108  97  115  116  61  52  13  10  0  100  100  100
return value3=16

Press any key to continue

mon_log函数的第一个参数是格式字符串,与printf一样用来设置后面参数格式的。
mon_log("%s,%d,%d,last=%c\r\n","abc",2,3,'4');生成的字符串与printf("%s,%d,%d,last=%c\r\n","abc",2,3,'4');相同。

  • 6
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
vsnprintf和vsprintf是C语言中的两个函数,用于格式化字符串输出。它们都可以将一个可变数量的参数根据指定的格式串输出到一个字符串中。 vsnprintf函数是一个可变参数版本的snprintf函数。snprintf函数用于将格式化的数据输出到一个字符串中,并且可以指定字符串的最大长度。vsnprintf函数与snprintf函数的不同之处在于,vsnprintf函数接受一个参数列表,而snprintf函数接受一个可变数量的参数。这使得vsnprintf函数可以处理可变数量的参数。 vsprintf函数是一个可变参数版本的sprintf函数。sprintf函数用于将格式化的数据输出到一个字符串中。与vsnprintf函数类似,vsprintf函数也可以接受可变数量的参数。 这两个函数的用法基本相似,都需要提供一个格式串和一个用于存储结果的字符缓冲区。格式串可以使用类似于printf函数的格式化字符,例如%d表示一个整数,%f表示一个浮点数等等。在格式串中可以使用%*s来表示一个字符串,*号表示字符串的最大长度。 vsnprintf和vsprintf函数的返回值是输出到缓冲区的字符数,不包括结尾的'\0'字符。如果输出的字符数超过了缓冲区的大小,那么多出来的字符将不会被写入缓冲区。 因此,如果你想要将格式化的数据输出到一个字符串中,可以使用vsnprintf或vsprintf函数,具体选择哪个函数取决于你是否需要指定字符串的最大长度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

【ql君】qlexcel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值