c - 从输入字符串中解析数据

标签 c parsing

我有这种输入数据。

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

谢谢!

最佳答案

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

关于c - 从输入字符串中解析数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13305146/

相关文章:

c - Valgrind "Conditional jump or move depends on uninitialised value(s)"错误

C++ 十六进制解析

C:可以将变量传递给请求结构的函数,以便在调用函数时将这些变量包装到结构中吗?

c - 访问动态分配的元素和数组

c++ - Boost.Spirit语法问题

php - 删除空白字符,除了 PHP 中的引号内?

java - InputString 中的 NumberFormatException

java - Ubuntu 终端中的工作代码,在 Windows Eclipse 中不起作用

C中的数组可以定义为根据用户的输入进行调整吗?

c - 如何交换命令行中指定文件(文件名和字符)中的字符?