0

我有这种输入数据。

<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()”的行为。

谢谢!

4

1 回答 1

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()参数计算的一部分省略。

于 2012-11-09T09:22:20.037 回答