我试图在文件中搜索单词,并在每次出现在文本中时将其添加到计数器变量中。在我的研究中,我无法找到有效的解决方案。这是我到目前为止使用的代码块。 N是代码中较早使用的变量,用于存储来自用户的输入(程序打印带有多个选项的菜单,搜索是列表中的第一项)。我检查了文件是否已正确打开,但是当我尝试执行此块时,出现了缓冲区!= nullptr的错误。有人看到这个问题吗?
if (strcmp(n, "S") == 0) {
char search_word = NULL;
printf("What word would you like to search for?");
scanf("%s", search_word);
while(fgets(str, sizeof(str), fp)){
if ((strstr(str, search_word)) != NULL)
i++;
}
printf("Your word appears %d times.", &i);
}
答案 0 :(得分:3)
您可以使用fget代替scanf
您需要循环显示一条线
#include <stdio.h>
#include <string.h>
int main() {
char search_word[100];
printf("What word would you like to search for?");
gets(search_word); // change scanf to gets
char line[1024];
int i = 0;
while (fgets(line, sizeof(line), fp)) {
char* found = line;
// After getting a line of characters, loop to find search_word and
// go to found empty
while ((found = strstr(found, search_word)) != NULL) {
i++;
found++; // move found to next char
}
}
printf("Your word appears %d times.", i);
return 0;
}
答案 1 :(得分:1)
我可以看到的第一个潜在问题是scanf中使用的变量,您正在尝试将char数组放入char中,因此,不要使用char search_word
,而是使用{{1 }}这样,您就可以读取最多32个字符的char数组。还有另一个问题是使用strstr时,该函数会在字符串中首次找到该单词时返回该词,这意味着如果您使用的是char search_word[32];
之类的字符串,而您使用的是{{1} }函数来搜索单词"Hello my name is Jeff. is ..."
,该函数的返回值是指向strstr
的指针,因此您需要使用返回值直到获得空返回值,然后移至下一行。>