タイムスタンプ付きのメッセージを印刷するカスタム印刷機能を作成しました。しかし、コンパイルすると、コンパイラは「フォーマット文字列は文字列リテラルではありません」と言います。それでも問題なくコンパイルされますが、このエラーに少しバグがあり、コンパイラーもこれは安全ではない可能性があると言っているので、修正したいと思います。
void Log(const char *message, ...)
{
time_t rawtime;
struct tm* timeinfo;
char timestamp[11];
time(&rawtime);
timeinfo = localtime(&rawtime);
strftime(timestamp, 11, "%X: ", timeinfo);
fprintf(stdout, timestamp); // format not a string literal and no format arguments [-Wformat-security]
va_list args;
va_start(args, message);
vfprintf(stdout, message, args);
va_end(args);
fprintf(stdout, "\n");
}
timestamp
をa に変更しようとしましたconst char*
が、それstrftime
を受け入れず、警告がまだ残っていました。
これを修正するにはどうすればよいですか?また、この関数を最適化する方法はありますC IO library
か?