无法使 C 方法icalrecur_expand_recurrence工作



这有点令人沮丧。我已经做了一段时间了,我似乎无法像它所说的那样让这种方法发挥作用。

#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:

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库。

~: ./hello
Segmentation fault

每当我改变任何指针时,它都会在编译过程中抱怨一些事情。有人能把它用起来吗??源文件来自github上的Marketcircle。

查看文档,您似乎有一个不需要的额外间接级别-您需要更改:

    time_t   *result[count]; /* output array */
    icalrecur_expand_recurrence(rrule, start, count, *result);

至:

    time_t   result[count]; /* output array */
    icalrecur_expand_recurrence(rrule, start, count, result);

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

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并返回它,这也是没有意义的——同样,打开编译器警告——让编译器帮助你发现并修复错误。

现在您可以将此扩展用于postgresql。

示例用法:

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)

相关内容

  • 没有找到相关文章

最新更新