这有点令人沮丧。我已经研究这个问题有一段时间了,我似乎无法让这个方法像 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/