vsnprintf打印可变参数的log

vsnprintf是一个C语言库函数,用于安全地将格式化的数据写入字符串,防止数组越界。它接受一个格式字符串和一个va_list参数,将可变参数列表格式化后存放到指定缓冲区。该函数在不同环境下可能有不同命名,如在Linux下为vsnprintf,在VC6下为_vsnprintf。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vsnprintf,C语言库函数之一,属于可变参数。用于向字符串中打印数据、数据格式用户自定义。

头文件:
#include <stdarg.h>
函数声明:
int_vsnprintf(char*str,size_tsize,constchar*format,va_listap);
参数说明:
char *str [out],把生成的格式化的字符串存放在这里.
size_t size [in], str可接受的最大字节数,防止产生数组越界.
const char *format [in], 指定输出格式的字符串,它决定了你需要提供的可变参数的类型、个数和顺序。
va_list ap [in], va_list变量. va:variable-argument:可变参数
函数功能:将可变参数格式化输出到一个字符数组。
用法类似于vsprintf,不过加了size的限制,防止了内存溢出(size为str所指的存储空间的大小)。
返回值:执行成功,返回写入到字符数组str中的字符个数(不包含终止符),最大不超过size;执行失败,返回负值,并置errno.[1] 
备注:
linux环境下是:vsnprintf
VC6环境下是:_vsnprintf

---

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

static const int MAX_LOG_LENGTH = 4*1024;

static void print_log(const char * format, ...)
{
    va_list args;
    va_start(args, format);

    char buf[MAX_LOG_LENGTH];

    vsnprintf(buf, MAX_LOG_LENGTH - 3, format, args);
    strcat(buf, "\n");
    fprintf(stdout, "log: %s", buf);
    fflush(stdout);
    va_end(args);
}


int main() {
	print_log("%d %s", 111000, "test");

	return 0;
}

-------

参考:http://stackoverflow.com/questions/1056411/how-to-pass-variable-number-of-arguments-to-printf-sprintf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值