2

我有一种情况,我试图打印出用户在 Lua 中格式化并通过注册函数发送给我的信息。我从客户那里得到的是一个格式字符串、参数的数量以及每个参数作为一个数字。在调用此函数之前,我不知道用户将拥有多少个参数。我通过查询 lua 系统得到它们。

如何在运行时使用格式字符串和数字列表调用 printf?我可以在运行时为数字的值分配一个数组,但是 printf 期望一个 va_list 而不是参数的数字数组。

根据参数的数量,我可以有大量的“if”语句,但我正在寻找一种更巧妙的方式。

有任何想法吗?

4

3 回答 3

1

如果您只需要打印出值,则可以使用 for 循环遍历所有值并单独打印它们,而无需换行。

于 2012-11-15T19:14:40.567 回答
1

我认为您可以只使用一个打印 %s 的 printf,并作为参数传递您的函数,该函数将返回 char*。该函数将接受参数数组作为参数。在函数内部,您可以使用 sprintf 将所有参数格式化为“字符串”,最后返回创建的“字符串”。

于 2015-12-21T11:19:24.790 回答
0

我认为在循环内重复调用 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");

如果我误解了你的问题,请纠正我。

于 2012-11-15T19:27:42.167 回答