以下情况会导致问题吗?

my_func()
{
  char date_field[11];
  time_t current_time;

  time(&current_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/

10-13 06:55