通常使用函数:
my_func("test");
我是否可以这样使用这个参数?
my_func(printf("current_count_%d",ad_id));
int my_func(const char *key)
通常使用函数:
my_func("test");
我是否可以这样使用这个参数?
my_func(printf("current_count_%d",ad_id));
int my_func(const char *key)
是的,您可以将 的返回值printf
用作函数参数。
但请记住printf
,成功返回写入的字符数。
所以
foo(printf("bar%d",123));
传递6
给foo
函数 not bar123
。
如果要传递printf
打印的字符串,可以使用sprintf
函数。它类似于printf
但不是写入控制台,而是写入 char 数组。
char buf[64]; /* malloc or whatever */
int pos = snprintf(buf, sizeof(buf), "current_count_%d", ad_id);
if (sizeof(buf) <= pos)
buf[sizeof(buf)-1] = '\0';
my_func(buf)
不; printf()
返回打印到标准输出的字符数。用于s[n]printf()
创建字符串,然后传递它。
如果您希望将可变数量的参数(例如 printf 接受)传递给某个函数,那么您需要查看 . 重现 printf (为了论证):
void varargfunc(char *fmt, ...)
{
char formattedString[2048]; /* fixed length, for a simple example - and
snprintf will keep us safe anyway */
va_list arguments;
va_start(arguments, fmt); /* use the parameter before the ellipsis as
a seed */
/* assuming the first argument after fmt is known to be an integer,
you could... */
/*
int firstArgument = va_arg(arguments, int);
fprintf(stderr, "first argument was %d", firstArgument);
*/
/* do an vsnprintf to get the formatted string with the variable
argument list. The v[printf/sprintf/snprintf/etc] functions
differ from [printf/sprintf/snprintf/etc] by taking a va_list
rather than ... - a va_list can't turn back into a ... because
it doesn't inherently know how many additional arguments it
represents (amongst other reasons) */
vsnprintf(formattedString, 2048, fmt, arguments);
/* formattedString now contains the first 2048 characters of the
output string, with correct field formatting and a terminating
NULL, even if the real string would be more than 2047 characters
long. So put that on stdout. puts adds an additional terminating
newline character, so this varies a little from printf in that
regard. */
puts(formattedString);
va_end(arguments); /* clean up */
}
如果您想添加与格式无关的其他参数,请在 'fmt' 参数之前添加它们。Fmt 被传递给 va_start 来表示“变量参数在这个之后开始”。
该函数printf
返回一个整数。
int printf ( const char * format, ... );
因此,my_func
只要my_func
将整数作为参数,您就可以使用它。情况似乎并非如此。