gpt4 book ai didi

创建一个带有自定义前缀的 printf 函数

转载 作者:太空宇宙 更新时间:2023-11-04 06:51:22 26 4
gpt4 key购买 nike

我正在尝试创建一个像这样打印的 printf 函数

[INFO] whatever 123

va_args 有效,但我不知道如何添加前缀。至少下面的代码不会做

#include <stdio.h>
#include <stdarg.h>

void myprintf (char *fmt, ...)
{
va_list argp;
va_start (argp, fmt);
vfprintf (stdout, "[INFO] " fmt, argp);
va_end (argp);
}

int main (int argc , char **argv)
{
myprintf ("arg count is %d\n", argc);
return 0;
}

有什么想法吗?

最佳答案

"[INFO] " fmt

此代码无效。您在此处尝试使用的“字符串粘贴”行为是预处理器行为,而不是 C 运算符。它只能用于字符串常量——不能用于变量。

在这里获得所需行为的最简单方法是简单地调用 printf 两次:

printf("[INFO] ");
va_start(argp, fmt);
vfprintf(stdout, fmt, argp);
va_end(argp);

您可能要考虑的更困难的方法包括:

  • myprintf() 定义为宏而不是函数,以便它可以在格式参数上使用字符串粘贴。

  • [INFO] "fmt 复制到一个临时缓冲区中,并将其用作格式化字符串。

  • [INFO] " 复制到临时缓冲区,使用 vsnprintf() 将输出附加到缓冲区,然后输出。

关于创建一个带有自定义前缀的 printf 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50662279/

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