我有一个调试系统,我想使用一个函数,该函数的代码号要使用 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/