localtime() - 分段错误

Posted

技术标签:

【中文标题】localtime() - 分段错误【英文标题】:localtime() - segmentation fault 【发布时间】:2016-06-02 21:30:57 【问题描述】:

我有这段代码从“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";

我一直在寻找解决方案,但无法解决。

提前致谢。

如果您需要更多信息,请告诉我。

【问题讨论】:

【参考方案1】:

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

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

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


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

【讨论】:

感谢您的帮助。当我有权限时,我会投票给你的答案。【参考方案2】:

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

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

【讨论】:

感谢您的帮助。当我有权限时,我会投票给你的答案。

以上是关于localtime() - 分段错误的主要内容,如果未能解决你的问题,请参考以下文章

高效开发:Java中的时间处理,从 Date+SimpleDateFormat+Calendar 到 LocalDateTime+LocalDate+LocalTime

高效开发:Java中的时间处理,从 Date+SimpleDateFormat+Calendar 到 LocalDateTime+LocalDate+LocalTime

oracle中修改当前时间,使之当前时间增加一个月。语句如何写??

第五周-第05章节-Python3.5-内置模块详解之time与datetime模块

分段错误与页面错误

C语言编程函数localtime_s在VS 2020中写的程序参数错误,参数怎么写?