我在使用C语言解析简单的iCalendar文件时遇到了问题。
char * description, * identifier, *tofree;
tofree = description = strdup(string);
identifier = strsep(&description, ":");
printf("{%s}\n", identifier);
printf("[%s]\n", description);
free(tofree);
string就是我刚从文件中读取的行,例如: BEGIN:VCALENDAR 当我运行这个程序时,我得到以下输出:
{BEGIN}
]VCALENDAR
有人可以帮我确定导致此问题的原因吗?输出应显示“[VCALENDAR]”,我不确定为什么会发生这种情况。
答案 0 :(得分:5)
您的输入数据以回车符\r
结尾。您的代码输出:
[VCALENDAR\r]\n
并且回车将光标放在行的开头,以便]
覆盖您的[
。
最好在扫描前删除结束的行;如果失败,请在\r
提供的分隔符中加入\n
和strsep()
,但您必须再次使用strsep()
来获取VCALENDAR
令牌