我在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]",我不知道为什么会发生这种情况.
输入数据以回车符结束\r.你的代码输出:
[VCALENDAR\r]\n
Run Code Online (Sandbox Code Playgroud)
并且回车将光标放在行的开头,这样就会]覆盖你的[.
最好在扫描前删除结束的行; 做不到这一点,包括\r和\n在提供给分隔符strsep(),但你必须使用strsep()第二次拿到VCALENDAR令牌.