vsnprintf

ddatsh

dev #redis redis

snprintf 和 vsnprintf 功能完全一样,只是 vsnprintf 将 snprintf 中的可变参数换成了 av_list 类型

#include <stdio.h>
int printf(const char* format, ...); //输出到标准输出
int fprintf(FILE* stream, const char* format, ...); //输出到文件
int sprintf(char* buffer, const char* format, ...);   //输出到字符串
int snprintf(char* buffer, int n, const char* format, ...);   //输出到字符串
#include <stdarg.h>
int vprintf(const char* format, va_list ap); //输出到标准输出
int vfprintf(FILE* stream, const char* format, va_list ap); //输出到文件
int vsprintf(char* buffer, const char* format, va_list ap);   //输出到字符串
int vsnprintf(char* buffer, int n, const char* format, va_list ap);   //输出到字符串

可变参数 va_list 获取方式通过下列函数获取, 并且总是成对调用

va_start(va_list ap, last);
va_end(va_list ap);
#include <stdarg.h>
#include <stdio.h>

void log_message(const char *fmt, ...) {
    va_list ap;
    char msg[256];

    // 初始化可变参数列表
    va_start(ap, fmt);

    // 使用可变参数列表格式化字符串
    vsnprintf(msg, sizeof(msg), fmt, ap);
    // 清理可变参数列表
    va_end(ap);

    // 输出格式化后的字符串
    printf("%s\n", msg);
}

int main() {
    log_message("Error code: %d, Error message: %s", 404, "Not Found");
    return 0;
}