関数に必要な文字数の目標の長さが必要*printf
です。私のシナリオは、最終的に文字列を作成する必要があるログ機能です (何が起こるかは関係ありません。末尾は a である必要がありますchar *
)。
私は現在これを持っています:
void log(char *format, ...)
{
char *full_message, *message;
FILE *nullfile;
va_list args;
va_start(args, format);
nullfile = fopen("/dev/null", "w");
message_len = vfprintf(nullfile, format, args) + 1;
fclose(nullfile);
va_end(args);
va_start(args, format);
message = malloc(message_len);
vsnprintf(message, message_len, format, args);
va_end(args);
// now do something with the final message
}
それは魅力のように機能しますが、あまりにも複雑に思えます。もっと簡単な方法はありますか?もっと理にかなっている何か。
追加の詳細: 最後に、文字列をさらにフォーマットして OpenSSLBIO
にダンプするため、 を使用するほど簡単ではありませんvfprinf
。