如何在 C 中使用格式修饰符打印函数的 return 值?

How to print to the return value of a function, using format modifiers, in C?

不知道这是否可能。我一直在寻找它,但没有找到。

我想要一个合并多个值并return将它们作为字符串文字的函数(所以没有 malloc 和随后的免费)。这可以通过打印到 return 值(如果这有意义并且可能)来实现,或者可能使用带有文字的 fprintf 作为目标,而不是说 stdout,然后该文字可以是 returned.

下面函数的参数只是一个例子,还可以有long等其他类型

#include <stdio.h>

char *format_and_return_literal(const char *s, int n, char c)
{
        int m = 7;

        //(1):  Possible to fprintf to return value of function?
        //fprintf(<func-return-literal>, "hello %s: %d %d %c", s, m, n, c);
        //return <func-return-literal>;

        // or

        //(2):  Possible to return string literal made of above parameters?
        //return "hello %s: %d %d %c", s, m, n, c)
}

int main()
{
        printf("%s\n", format_and_return_literal("foo", 33, 'M'));
        return 0;
}

更新:谢谢大家。也许我使用的术语不是最正确的,但我按照@Davislor 关于使用静态缓冲区的建议实现了我想要的。我知道 snprintf 但还是谢谢你,@PeterJ。

char *format_and_return_literal(const char *s, int n, char c)
{
        static char buf[1024];
        int m = 7;

        snprintf(buf, sizeof(buf), "hello %s: %d %d %c", s, m, n, c);

        return buf;
}

您可以 snprintf 到固定大小,static 缓冲区和 return 那个。随后的调用将覆盖之前的 return 值。或者,传入调用者拥有的目标缓冲区。作为论据。

从这种解决方案的逻辑中抽象出来,你有 printf 的版本,它 "prints" 到给定的缓冲区,它被称为 sprintf 和另一个 snprintf 更安全一点