我有这种输入数据。
<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/