gpt4 book ai didi

c - 如何在 C 中定义一个接受格式化输入字符串的函数?

转载 作者:行者123 更新时间:2023-12-04 02:25:19 26 4
gpt4 key购买 nike

我构建了一个自定义日志记录函数,它接收“日志级别”和字符串。用户将指定与消息关联的日志级别(即错误、警告、跟踪等)。日志功能只会根据当前配置的日志级别将消息打印到控制台。

int global_log_level = INFO;

void logger(int msg_log_level, char * msg)
{
if(msg_log_level >= global_log_level )
{
printf("Log Level = %u: %s", msg_log_level, msg);
}
}
理想情况下,我想将格式化的字符串提供给这个函数。
logger(LOG_LEVEL_ERROR, "Error of %u occurred\n", error_code);
但是,通过添加此“包装”逻辑,我无法输入格式化的消息。相反,我必须将消息写入一个临时字符串,然后将其输入到函数中。
char temp[512];
sprintf("Error of %u occurred\n", error_code);
logger(LOG_LEVEL_ERROR, temp);
有没有办法实现记录器功能,这样我就不需要让用户自己创建一个临时字符串?

最佳答案

这是 question 15.5C FAQ list .
你要vprintf ,它可以让您编写自己的 printf类函数logger ,但是您可以将实际的格式字符串和参数传递给 vprintf做这项工作。诀窍是你需要构造一个特殊的va_arg键入“指向”可变长度参数列表。它看起来像这样:

#include <stdarg.h>

int global_log_level = INFO;

void logger(int msg_log_level, char * msg, ...)
{
va_list argp;
va_start(argp, msg);

if(msg_log_level >= global_log_level )
{
printf("Log Level = %u: ", msg_log_level);
vprintf(msg, argp);
}

va_end(argp);
}

关于c - 如何在 C 中定义一个接受格式化输入字符串的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68154231/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com