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



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

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

下面函数的参数只是一个示例,可能还有其他类型,例如 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("%sn", 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缓冲区并返回该缓冲区。 然后,后续调用将覆盖以前的返回值。 或者,传入调用方拥有的目标缓冲区。作为论据。

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

最新更新