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

标签 c formatting printf string-formatting

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

相关文章:

java - 如何在不指定本地化模式的情况下格式化本地化日期?

无法修改 malloc() 分配的地址处的值

c - 如何通过GraphicsMagick C API实现 "gm convert -profile"?

c - 多个线程在没有锁的情况下递增共享变量但返回 "unexpected"输出

javascript - 是否有任何工具可以将 JavaScript 重写为每个函数形式一个变量?

c# - 在 C# 中使用自定义千位分隔符

c - 需要解释在什么情况下我们应该在C中将&与printf一起使用

c - C printf 函数如何知道传递的整数大小?

C: 在 BST 打印输出上解引用指向不完整类型错误的指针

c - 将固定整数附加到字符串