以下情况会导致问题吗?
my_func()
{
char date_field[11];
time_t current_time;
time(¤t_time);
sprintf(date_field, "%0.3d%0.3d%.02d%0.2d\0", current_time.tm_yday,
current_time.tm_year, current_time.tm_hour, current_time.tm_min);
...
}
我意识到这可能会使缓冲区溢出。。。我担心的是这会产生副作用?例如:堆芯?如何捕捉这种问题?
最佳答案
如目前所写,您的代码不会编译:current_time
是一个time_t
,而不是一个struct tm
。如何计算tm
结构以及如何使用它?如果未正确初始化此结构,sprintf()
可能会调用未定义的行为,这意味着任何事情都可能发生,但这将要求某些字段超出范围。
试图详细说明这样一个小而不准确的代码片段的副作用是徒劳的。
通过使缓冲区变大来修复代码,并使用snprintf
而不是sprintf
,确保正确计算tm
结构。一个无效的date_time
字符串,即使没有缓冲区溢出,也可能导致代码中其他地方或数据库本身出现其他问题。。。发布更多的代码将有助于调查。
你知道更多关于坠机的事吗?你有一个寄存器转储吗?
关于c - 在缓冲区溢出的情况下在C中使用sprintf的副作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38414198/