gpt4 book ai didi

c - mktime() 段错误

转载 作者:太空宇宙 更新时间:2023-11-04 03:59:05 24 4
gpt4 key购买 nike

我正在尝试将一周重复添加到包含日期信息的事件结构中。我这样做是为了在某个时间之前创建一个事件的多个实例。我的 mktime 函数出现段错误,其中 full_time = mktime(&caltime);我不知道为什么。

void multiple(icalevent event, int is_location){
icalevent temp;
int rrule_bound = atoi(event.rrule);
int rtime_bound = atoi(event.rtime);
int start_bound = atoi(event.start);
int stime_bound = atoi(event.stime);
char buffer[9];
struct tm caltime;
time_t full_time;
char time_str[15];

temp = cpystruct(event, is_location);
while((start_bound <= rrule_bound) && (stime_bound <= rtime_bound)){
memset(&caltime, 0, sizeof(struct tm));
strncpy(time_str, temp.start, 9);
strncat(time_str, temp.stime, 6);

strptime(time_str, "%Y%m%d%H%M%S", &caltime);
caltime.tm_mday += 7;
full_time = mktime(&caltime);
if(caltime.tm_isdst == 1){
caltime.tm_hour -= 1;
}
full_time = mktime(&caltime);

strftime(buffer, 9, "%Y%m%d", &caltime);
start_bound = atoi(buffer);
strncpy(temp.end, buffer, 8);
strncpy(temp.start, buffer, 8);

if((start_bound <= rrule_bound) && (stime_bound <= rtime_bound)){
/*create a sort string*/

calendar[percent_full] = cpystruct(temp, is_location);
printst(calendar[percent_full]);
percent_full++;
}
else{
break;
}

}

return;
}

icalevent 结构:

    typedef struct{
char start[9]; /*"YYYYMMDD*/
char stime[7]; /*"HHMMSS"*/
char end[9]; /*"YYYYMMDD"*/
char etime[7]; /*"HHMMSS"*/
char rrule[9]; /*"YYYYMMDD"*/
char rtime[7]; /*"HHMMSS"*/
char *location; /*"2343 fake street"*/
char *summary; /*"Halloween party"*/
char *sort_str; /*"YYYYMMDDHHMMSSHalloween party*/
} icalevent

编辑:

icalevent cpystruct(icalevent temp, int is_location) {
icalevent perm;
strncpy(perm.start, temp.start, 9);
strncpy(perm.stime, temp.stime, 7);
strncpy(perm.end, temp.end, 9);
strncpy(perm.etime, temp.etime, 7);
strncpy(perm.rrule, temp.rrule, 9);
strncpy(perm.rtime, temp.rtime, 7);
if(is_location) {
perm.location = strdup(temp.location);
} else {
perm.location = NULL;
}

perm.summary = strdup(temp.summary);
perm.sort_str = strdup(temp.sort_str);
return perm;
}

最佳答案

很可能,您的问题不是mktime,而是您的复制语句之一。第一个是

strncat(time_str, temp.stime, 6);

使用此 time_str 可能不会以 NUL 终止。

这里也一样

strncpy(temp.end, buffer, 8);
strncpy(temp.start, buffer, 8);

temp.endtemp.start 之前可能以 NUL 终止,但您无法确定。只需使用 strcpy 即可。

下一个是

calendar[percent_full] = cpystruct(temp, is_location);
printst(calendar[percent_full]);
percent_full++;

我没有看到 calendar 结束的检查。因此,可能会在日历结束后写入。

顺便说一句,当你这样做的时候

if(caltime.tm_isdst == 1){
caltime.tm_hour -= 1;
}

tm_hour 可能变为负值。

关于c - mktime() 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13674338/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com