[英]Using printf in C when I don't know how many arguments until runtime
我有一种情况,我试图打印出由用户在 Lua 中格式化并通过注册函数发送给我的信息。 我从客户那里得到的是一个格式字符串、参数的数量以及每个参数作为一个数字。 在调用此函数之前,我不知道用户将拥有多少个参数。 我通过查询 lua 系统来获取它们。
如何在运行时使用格式字符串和数字列表调用 printf? 我可以在运行时为数字的值分配一个数组,但是 printf 期望一个 va_list 而不是参数的数字数组。
根据参数的数量,我可以有大量的“if”语句,但我正在寻找一种更巧妙的方法。
有任何想法吗?
如果您只需要打印出值,您可以使用 for 循环遍历所有值并单独打印它们,无需换行。
我认为您可以只使用一个打印 %s 的 printf,并作为参数传递您将返回 char* 的函数。 该函数将接受参数数组作为参数。 在函数内部,您可以使用 sprintf 将所有参数格式化为“字符串”,并在最后返回创建的“字符串”。
我认为在循环中重复调用 printf 显然可以运行“参数数量”次。 我的意思是说:
void YourFunction(char *format, int number_of_arguments, int *arguments)
{
for(int index = 0; index < number_of_arguments; index++)
{
printf(format, arguments[index]);
}
}
现在您可以按照您想要的方式对其进行格式化,例如通过执行添加换行符,
strcat(format, "\n");
如果我误解了你的问题,请纠正我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.