我有这种输入数据。
<html>......
<!-- OK -->
我只想在评论标记<!--
之前提取数据。
这是我的代码:
char *parse_data(char *input) {
char *parsed_data = malloc(strlen(input) * sizeof(char));
sscanf(input, "%s<!--%*s", parsed_data);
return parsed_data;
}
但是,它似乎没有返回预期的结果。我无法弄清楚为什么会这样。
有人能解释一下提取这类数据的正确方法以及'sscanf()的行为。
谢谢!
答案 0 :(得分:4)
"%s"
格式说明符不会将"<!--"
视为单个分隔符,也不会将任何单个字符视为分隔符(无论如何都不是正确的行为)。只有空格才被视为分隔符。扫描集在sscanf()
中可用,但它们采用单个字符的集合,而不是表示单个分隔符的字符序列。这意味着第一个空格字符前input
中的所有内容都将分配给parsed_data
。
您可以改为使用strstr()
:
const char* comment_start = strstr(input, "<!--");
char* result = 0;
if (comment_start)
{
result = malloc(comment_start - input + 1);
memcpy(result, input, comment_start - input);
result[comment_start - input] = 0;
}
请注意,sizeof(char)
保证为1
,因此可以在malloc()
参数计算中省略。