【发布时间】:2017-05-13 02:45:29
【问题描述】:
您好,我昨天从我的编程课上学习了文件 I/O,在这个练习中,我们需要从 html 文件中提取字符串并将其保存在 struct 中。
我创建了一个函数来获取字符串“Hello World”,但我的问题是我似乎无法获取第 3 次和第 4 次出现的 Hello world。如果有人可以向我解释为什么我的代码无法检测到第 3 次和第 4 次出现。
这是我的代码
void get_name (char *line, FILE * fPointer, struct Results items)
{
char *p1;
char *p2;
char temp[100] = { 0 };
int i = 0;
while (fgets (line, 268, fPointer) != NULL) { //String//
p1 = strstr (line, "<span class=\"title\">");
if (p1 == NULL) {
printf ("Error p1\n");
}
else {
printf ("word found\n");
p2 = strstr (p1, "</span>");
if (p2 == NULL) {
printf ("Error P2\n");
}
else {
strncpy (temp, p1 + strlen ("<span class=\"title\">"),
p2 - p1 - strlen ("<span class=\"title\">"));
strncpy (items[i].item_name, temp,
sizeof (temp) / sizeof (temp[0]));
printf ("Success!\n");
i++;
}
}
}
}
编辑:文本
<span class="title"> Hello world1 </span>
<span class="title">Hello world2</span>
<span class="title"> Hello world3
</span>
<span class="title">
Hello world4
</span>
【问题讨论】:
-
当您的程序无法按预期运行时,正确的做法是先尝试自己调试它。通过使用调试器。你这样做了吗?你发现了什么?
-
从记事本内容的屏幕截图中很难判断换行符在哪里。 (在使用
fgets时,这会极大地影响您对内容的搜索)请张贴实际文本(每行都以4-spaces开头,因此格式正确)。在某些情况下,"<span class=\"title\">"甚至似乎与Hello World不在同一行(可能是,只是无法判断) -
"寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定问题或错误以及在问题本身中重现它所需的最短代码。没有明确的问题陈述对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable example。"
-
您好,我发布了实际文本,我的函数似乎无法检测到另一个“Hello world”,因为 strstr 找不到“”。
-
另外,你不应该用'\0'而不是'0'来初始化你的temp[100]吗?否则你会遇到连续使用 temp 作为字符串的问题。