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";
我一直在寻找解决方案,但无法解决这个问题。
提前致谢。
如果您需要一些其他信息,请告诉我。
您没有初始化struct tm tm2
。 当它传递给strptime时,只有格式字符串"%d-%m-%Y"
中指定的成员设置为值,其他成员保持不变,在这种情况下未初始化,因此它们的值是不确定的。
将部分初始化的struct tm2
传递给mktime()将导致未定义的行为。
您需要使用某些值初始化结构,最好使用零。
并且数组userDate太小而不能包含"29-02-2016"
。
此代码中的两个问题:您没有初始化tm2,因此它可能包含任何值。 如果mktime不喜欢它的参数,它将返回(time_t)-1。 调用localtime((time_t)-1)
似乎崩溃了一个段错误。
您应该初始化tm2
并检查localtime
返回-1。