Я думаю Есть 2 потенциальные проблемы
Задача 1 является стек , Стек представляет собой (относительно) небольшой бит памяти, используемый в потоке, чтобы отслеживать функции автоматически изменяемых переменных, значений внутри и снаружи и т. Д. Он не предназначен для больших объемов данных. Вполне возможно, что ваш буфер line
слишком велик для стека!
Если вы хотите, чтобы буфер был большим, лучше всего использовать malloc()
для размещения на куче. Куча большая, и если выделение не удастся, вы можете обнаружить ее и обработать соответствующим образом.
Проблема 2 не проверяет значение fp
. fopen()
может вернуть NULL
, если ему не удается открыть файл. Если это так, и вы пройдете fp
до fgets()
, вы получите ошибку seg.
Когда я обратился эти две проблемы на моей машине, ваша программа работала ...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFSIZE 99999
int main()
{
char *line = malloc(BUFSIZE);
FILE *fp = fopen("file.txt", "r");
if(!line || !fp) {
printf("OOPS");
free(line);
return 1;
}
while (fgets(line, BUFSIZE, fp) != NULL)
{
if (strstr(line, "word") != NULL)
{
printf("%s", line);
}
}
fclose(fp);
free(line);
return 0;
}
Примечание fgets()
читает максимум один меньше, чем значение параметра размера и добавит нулевой терминатор для вас.
Когда вы уменьшили с 9999999 до 256? вы отредактировали как 'line [9999999];' и 'fgets (строка, 9999999,'? проще использовать/поддерживать 'while (fgets (строка, размер строки, fp)! = NULL)' – chux
* Какой * '9999999 для Вы пытались уменьшить? Оба из них? –
У меня были бы проблемы с сохранением того же числа '9' в обоих целых числах ... – Downvoter