如何在 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 更安全一点
不知道这是否可能。我一直在寻找它,但没有找到。
我想要一个合并多个值并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 更安全一点