gpt4 book ai didi

c - 如何有效地将多个参数与要在 C 中打印的字符串连接起来?

转载 作者:行者123 更新时间:2023-11-30 17:08:44 29 4
gpt4 key购买 nike

我有一个调试系统,我想使用一个函数,该函数的代码号要使用 printf 在终端中打印。目前的功能是这样的:

#define DEBUG(args...) general_printf(CMT_Common_Debug,args)

void general_printf(int messageCat, __const char *__restrict __format, ...)
{
printf("[%d]",messageCat);

printf(__format);
}

这个函数的作用是调用一个printf,前面带有格式为[code_here]的标识符代码。我面临的问题是,可能会发生一些事情,导致两次调用 printf 之间需要一段时间,从而导致终端中的消息损坏;这意味着我必须对 printf 进行一次调用。不幸的是,加入这两个部分是无效的:

printf("[%d]%s",messageCat,__format);

; %d、%u 等未填充。我无法找到如何将 ... 传递给 printf

我咨询了另一位开发人员,他建议以某种方式将数据复制到缓冲区,合并两个部分然后打印,但这需要太多处理;我想要一种更直接的方法。

那么我该怎么做呢?

编辑

与可能的重复情况相比,我的问题并不完全独特,但即使是该线程也没有提供我需要的解决方案,即如何将 int messageCat 添加到对 printf 或类似函数的相同调用。

最佳答案

搜索上述函数和所提供的假定重复问题的链接后,我设法找到了一种方法来完成我想要的操作:

void general_printfL(int messageCat, int saveInLog, __const char *__restrict __format, ...)
{
#if 0
printf("[%d|%d]",messageCat,saveInLog);
printf(__format);
#else
char bufTemp[1];

const int reqBuffSize = snprintf(bufTemp,0,__format);

char buff[reqBuffSize + 5];

sprintf(buff,"[%d|%d]",messageCat,saveInLog);

va_list args;

va_start(args,__format);

vsprintf(&buff[6],__format,args);

va_end(args);

printf(buff);
#endif
}

唯一的问题是它并不简单:它需要对一项本来应该很简单的任务进行大量处理,因为只需在 __format 之前放置一些格式化文本即可。在这种情况下,等待更好的解决方案。

关于c - 如何有效地将多个参数与要在 C 中打印的字符串连接起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33552396/

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