在C中进行Strsep和iCalendar解析

1 c icalendar

我在C中解析一个简单的iCalendar文件时遇到了问题.

char * description, * identifier, *tofree;
tofree = description = strdup(string);
identifier = strsep(&description, ":");
printf("{%s}\n", identifier);
printf("[%s]\n", description);
free(tofree);
Run Code Online (Sandbox Code Playgroud)

string将是我刚从文件中读取的行,例如:BEGIN:VCALENDAR当我运行此程序时,我得到以下输出:

{BEGIN}
]VCALENDAR
Run Code Online (Sandbox Code Playgroud)

有人可以帮我确定导致这个问题的原因吗?输出应显示"[VCALENDAR]",我不知道为什么会发生这种情况.

Jon*_*ler 5

输入数据以回车符结束\r.你的代码输出:

[VCALENDAR\r]\n
Run Code Online (Sandbox Code Playgroud)

并且回车将光标放在行的开头,这样就会]覆盖你的[.

最好在扫描前删除结束的行; 做不到这一点,包括\r\n在提供给分隔符strsep(),但你必须使用strsep()第二次拿到VCALENDAR令牌.