Как сказано в комментарии, в коде есть как минимум 2 проблемы: ваш fgets
будет извлекать только последнюю строку (если она вообще получит одну? В любом случае, это не то, что вам нужно), ивы увеличиваете строку search
вместо строки buff
.
Что-то подобное должно решить большинство ваших проблем, если в вашем файле нет строк длиной более 999 символов.Это не будет работать должным образом, если вы используете символы \n
или NULL в строке поиска.
int count = 0;
while (fgets(buff, 1000, fp) != NULL)
{
char *temp = buff;
while ((temp = strstr(temp, search)))
{
printf("%d. %s\n", count + 1, temp);
count++;
temp++;
}
}
Вот основной пример для тестирования.Я использовал argv
, чтобы обеспечить input.txt
и search
строку.
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
FILE *fp;
char buff[1000];
char *search;
if (argc < 3)
return (-1);
search = argv[2];
if (search[0] == '\0')
return (-1);
if ((fp = fopen(argv[1], "r")) == NULL)
return (-1);
int count = 0;
while (fgets(buff, 1000, fp) != NULL)
{
char *temp = buff;
while ((temp = strstr(temp, search)))
{
printf("%d. %s\n", count + 1, temp);
count++;
temp++;
}
}
printf("Match found: %d\n", count);
return 0;
}