gpt4 book ai didi

c++ - 带有时间戳的自定义打印功能给出警告

转载 作者:行者123 更新时间:2023-11-28 03:31:33 26 4
gpt4 key购买 nike

我制作了一个自定义打印函数,它打印带有时间戳的消息。但是当我编译它时,编译器说“格式字符串不是字符串文字”。它仍然可以正常编译,但我有点被这个错误所困扰,因为编译器还说这可能是不安全的,所以我想修复它。

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 更改为 const char*strftime 不接受它并且警告仍然存在。

我该如何解决这个问题,有什么方法可以优化这个函数(因为我对 C IO 库 了解不多)?

最佳答案

fprintf(stdout, timestamp);

fprintf 用于由格式字符串定向的格式化输出。不带参数但格式字符串的调用有点误用,而且启动速度很慢。为了安全地使用 fprintf,您应该使用 fprintf (stdout, "%s", timestamp);

或者,只需使用 fputs (timestamp, stdout); 这将绕过格式字符串的解析,并按原样将字符串打印到标准输出。这正是您想要的,而且速度更快,因为 fputs 不解析要打印的字符串。

关于c++ - 带有时间戳的自定义打印功能给出警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12391528/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com