C 中的 Strsep 和 iCalendar 解析

Strsep and iCalendar parsing in C

我在用 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]”,我不确定为什么会这样。

您的输入数据以回车符 return、\r 结尾。您的代码输出:

[VCALENDAR\r]\n

并且回车 return 将光标置于行首,因此 ] 会覆盖您的 [.

最好在扫描前删除行结束;如果失败,请在提供给 strsep() 的分隔符中包含 \r\n,但您必须再次使用 strsep() 才能获得 VCALENDAR 令牌.