首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mktime()断层

mktime()断层
EN

Stack Overflow用户
提问于 2012-12-02 21:58:29
回答 1查看 615关注 0票数 1

我试图在包含日期信息的事件结构中重复添加一个星期。我这样做是为了在某个时间之前创建一个事件的多个实例。我的mktime函数有一个seg错误,其中full_time = mktime(&caltime);我不知道原因。

代码语言:javascript
复制
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结构:

代码语言:javascript
复制
    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

编辑

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

发布于 2012-12-02 22:17:02

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

代码语言:javascript
复制
strncat(time_str, temp.stime, 6);

有了这个time_str,很可能不会终止NUL。

这里也一样

代码语言:javascript
复制
strncpy(temp.end, buffer, 8);
strncpy(temp.start, buffer, 8);

temp.endtemp.start可能在以前被终止,但你不能确定。只需使用strcpy即可。

下一个是

代码语言:javascript
复制
calendar[percent_full] = cpystruct(temp, is_location);
printst(calendar[percent_full]);
percent_full++;

我没有看到calendar结束时的支票。因此,在日历结束后可能会有一段文字。

作为旁白,当你做的时候

代码语言:javascript
复制
if(caltime.tm_isdst == 1){
    caltime.tm_hour -= 1;
}

tm_hour可能成为阴性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13674338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档