以下是否会导致问题?
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);
...
}
我意识到这个可能超出了date_field
缓冲区......我关心的是这种情况发生的副作用?即:核心转储?如何捕捉/捕获这类问题?
答案 0 :(得分:1)
按照目前的说法,您的代码无法编译:{{1}}是current_time
,而不是time_t
。如何计算struct tm
结构以及如何使用它?如果未正确初始化此结构,tm
可能会调用未定义的行为,这意味着任何事情都可能发生,但这会要求某些字段超出范围。
尝试从这么小且不准确的代码片段中详细说明副作用是徒劳的。
通过使缓冲区变大来修复代码,并使用sprintf()
代替snprintf
并确保正确计算sprintf
结构。即使没有缓冲区溢出,无效的tm
字符串也可能导致代码或数据库本身的其他问题......发布更多代码有助于调查。
您对实际崩溃有更多了解吗?你有注册转储吗?