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
令牌.
我在用 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
令牌.