localtime() - 分段错误

时间:2016-02-21 13:55:11

标签: c fault localtime

我有这个代码从" 29-02-2016"之类的日期返回工作日,但有时它会在本地时间(& t)给我分段错误。

int obterDiaSemana(char *str) {
 struct tm tm2;
 if(strptime(str, "%d-%m-%Y", &tm2) != NULL) {
  time_t t = mktime(&tm2);
  return localtime(&t)->tm_wday; //Sunday=0, Monday=1, etc.
 }
 return -1;
}

该功能收到:

 char userDate[10]="29-02-2016";

我一直在寻找解决方案,但无法解决这个问题。

提前致谢。

如果您需要一些其他信息,请告诉我。

2 个答案:

答案 0 :(得分:3)

您尚未初始化struct tm tm2。当它传递给strptime时,只有格式字符串"%d-%m-%Y"中指定的成员被设置为值,其他成员保持不变,在这种情况下未初始化,因此它们的值是不确定的。

将部分初始化的struct tm2传递给mktime()将导致未定义的行为。

您需要使用一些值初始化结构,最好使用零。

数组userDate太小,无法包含"29-02-2016"

答案 1 :(得分:1)

此代码中的两个问题:您没有初始化tm2,因此它可能包含任何值。如果mktime不喜欢它的参数,它将返回(time_t)-1。调用localtime((time_t)-1)似乎因段错误而崩溃。

您应初始化tm2并检查localtime是否返回-1。