首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使C方法icalrecur_expand_recurrence工作

无法使C方法icalrecur_expand_recurrence工作
EN

Stack Overflow用户
提问于 2013-02-12 23:02:12
回答 2查看 246关注 0票数 0

这有点令人沮丧。我已经在这上面工作了一段时间了,我似乎不能让这个方法像it says it does那样工作。

代码语言:javascript
复制
#include "icalrecur.h"
#include <time.h> /* for time() */
#include <stdio.h>

int get_occurrences(char* rrule, time_t start, int count)
{
        //char*        rule; /* rule string */
       // *rule = PG_GETARG_CHAR(0);

        time_t   *result[count]; /* output array */

        icalrecur_expand_recurrence(rrule, start, count, *result);

        return (time_t) *result;
}


//time_t *output[5*8];

void main() {
        time_t right_now = time(0);
        char *_rrule = "FREQ=WEEKLY;INTERVAL=2;COUNT=8;WKST=SU;BYDAY=TU,TH";
        get_occurrences(_rrule, right_now, 5);
}

我将此测试文件另存为ical_recur.h。然后我输入bash:

代码语言:javascript
复制
gcc -I/usr/local/libical/include/libical -L/usr/local/libical/lib/ -lical -o hello ical_recur.c

以包含libical.a库。include/libical目录中有icalrecur.h,所以我甚至不需要包含整个ical库。

代码语言:javascript
复制
~: ./hello
Segmentation fault

任何时候我改变任何指针,它都会在编译过程中开始抱怨一些东西。有人能让它工作吗??源文件来自Marketcircle on github

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-12 23:08:55

看看documentation,你似乎有一个不想要的额外的间接性级别-你需要改变:

代码语言:javascript
复制
    time_t   *result[count]; /* output array */

    icalrecur_expand_recurrence(rrule, start, count, *result);

至:

代码语言:javascript
复制
    time_t   result[count]; /* output array */

    icalrecur_expand_recurrence(rrule, start, count, result);

另外,你将一个只读字符串传递给一个需要char *的函数--这至少会给你一个编译器警告(提示:始终使用gcc -Wall ...,仔细阅读警告,理解它们并修复它们)。main()应该看起来像这样:

代码语言:javascript
复制
int main() {
    time_t right_now = time(0);
    char _rrule[] = "FREQ=WEEKLY;INTERVAL=2;COUNT=8;WKST=SU;BYDAY=TU,TH";
    get_occurrences(_rrule, right_now, 5);
    return 0;
}

一些更多的问题:

  • 这一行没有做任何有用的事情,但是不清楚您想要实现什么:

char _size =(Char)(Int)‘0’)+ sizeof(result));

所有这些类型转换都是一种“代码气味”,这应该会告诉你正在做一些非常错误的事情,在这里

  • 你的函数被定义为返回一个int,但是你试图将你的数组强制转换为一个time_t并返回它,这也是没有意义的-同样,打开编译器警告-让编译器帮助你找到并修复错误。
票数 1
EN

Stack Overflow用户

发布于 2014-09-15 19:51:11

现在您可以使用postgresql的this扩展。

示例用法:

代码语言:javascript
复制
SELECT * FROM
     unnest(
         rrule_get_occurrences('FREQ=WEEKLY;INTERVAL=1;WKST=MO;UNTIL=20200101T045102Z;BYDAY=SA;BYHOUR=10;BYMINUTE=51;BYSECOND=2'::rrule,
             '2019-12-07 10:51:02+00'::timestamp with time zone)
     );

          unnest
 ------------------------
  2019-12-07 10:51:02+00
  2019-12-14 10:51:02+00
  2019-12-21 10:51:02+00
  2019-12-28 10:51:02+00
 (4 rows)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14835443

复制
相关文章

相似问题

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