无法让 C 方法 icalrecur_expand_recurrence 工作

标签 c rrule libical

这有点令人沮丧。我已经研究这个问题有一段时间了,我似乎无法让这个方法像 it says it does 那样工作。 .

#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

每当我更改任何指针时,它都会在编译期间开始提示某些内容。有人能让这个工作吗?源文件来自Marketcircle on github .

最佳答案

查看documentation看来您有一个不需要的额外间接级别 - 您需要更改:

    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并返回它,这也是没有意义的- 再次,打开编译器警告 - 让编译器帮助您查找并修复错误。

关于无法让 C 方法 icalrecur_expand_recurrence 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14835443/

相关文章:

c - ungetc:回推的字节数

c - 管道:错误的文件描述符

python - 将来的规则,但相对于今天早上

c# - 我应该如何在移动约会时更新 iCal RRULE?

javascript - 在更改 View 网格 fullcalendar v4 上拖放后,带有 rrule 插件的事件未更新

c - 在结构中初始化 typedef 数组

c - OSX Hid : List of possible usage pages, 我在哪里可以找到它?(即 kHIDUsage_GD_GamePad 等)