localtime() - 分段错误
localtime() - segmentation fault
我有这段代码 return 从“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"
中指定的成员被设置值,其他的保持不变,在这种情况下未初始化,因此它们的值是不确定的。
将部分初始化的结构 tm2
传递给 mktime() 将导致未定义的行为。
您需要用一些值初始化结构,最好是零。
数组 userDate 太小,无法包含 "29-02-2016"
。
此代码中的两个问题:您没有初始化 tm2,因此它可能包含任何值。如果 mktime 不喜欢它的参数,它将 return (time_t)-1。调用 localtime((time_t)-1)
似乎因段错误而崩溃。
您应该初始化 tm2
并检查 localtime
returns -1.
我有这段代码 return 从“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"
中指定的成员被设置值,其他的保持不变,在这种情况下未初始化,因此它们的值是不确定的。
将部分初始化的结构 tm2
传递给 mktime() 将导致未定义的行为。
您需要用一些值初始化结构,最好是零。
数组 userDate 太小,无法包含 "29-02-2016"
。
此代码中的两个问题:您没有初始化 tm2,因此它可能包含任何值。如果 mktime 不喜欢它的参数,它将 return (time_t)-1。调用 localtime((time_t)-1)
似乎因段错误而崩溃。
您应该初始化 tm2
并检查 localtime
returns -1.