vsnprintf的作用和使用
vsnprintf用来将可变参数格式化输出到一个字符数组,常和va_start和va_end一起使用。vsnprintf函数介绍函数功能:将可变参数格式化输出到一个字符数组。注意:在linux环境下是:vsnprintf但在VC6环境下是:_vsnprintf头文件:#include <stdarg.h>函数声明:int vsnprintf(char *str, size_t si
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');
相同。
更多推荐
所有评论(0)