我有一种情况,我试图打印出用户在 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");
如果我误解了你的问题,请纠正我。