2

Lua でユーザーがフォーマットし、登録された関数を介して送信された情報を印刷しようとしている状況があります。私が顧客から得たのは、書式文字列、引数の数、および各引数を数値として示したものです。この関数が呼び出されるまで、ユーザーが持つ引数の数はわかりません。lua システムにクエリを実行して取得します。

実行時に書式文字列と数値のリストを使用して printf を呼び出すにはどうすればよいですか? 実行時に数値の値に配列を割り当てることができますが、printf はパラメーターの数値配列ではなく va_list を想定しています。

引数の数に基づいて大量の「if」ステートメントを作成できましたが、よりスマートな方法を探していました。

何か案は?

4

3 に答える 3

1

値を出力する必要があるだけの場合は、 for ループを使用してすべての値をループし、改行なしで個別に出力できます。

于 2012-11-15T19:14:40.567 に答える
1

%s を出力する printf を 1 つだけ使用でき、引数として 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 に答える