fgets в C не возвращает часть строки - PullRequest
1 голос
/ 14 июня 2010

Я совершенно новый в C, и я пытаюсь сделать небольшое приложение, которое ищет строку в файле.Моя проблема в том, что мне нужно открыть большой файл (более 1 ГБ) с одной строкой внутри, и fgets возвращает мне весь файл (я делаю тест с файлом размером 10 КБ).

На самом деле это мойкод:

#include <stdio.h>
#include <string.h>


int main(int argc, char *argv[]) {
 char *search = argv[argc-1];

 int retro = strlen(search);
 int pun  = 0;
 int sortida;
 int limit = 10;

 char ara[20];

 FILE *fp; 
 if ((fp = fopen ("SEARCHFILE", "r")) == NULL){
  sortida = -1;
  exit (1);
 }

 while(!feof(fp)){
  if (fgets(ara, 20, fp) == NULL){
   break;
  }
  //this must be a 20 bytes line, but it gets the entyre 10Kb file
  printf("%s",ara);
 }

    sortida = 1;

 if(fclose(fp) != 0){
  sortida = -2;
  exit (1);
 }

 return 0;
}

Что я могу сделать, чтобы найти строку в файле?

Я пробовал с GREP, но это не помогает, потому что он возвращает позицию: ENTIRE_STRING.

Я открыт для идей.

Ответы [ 2 ]

3 голосов
/ 14 июня 2010

Попробуйте

printf("%s\n",ara);     

Также рассмотрите возможность инициализации переменных перед их использованием:

char ara[20]={0x0};
1 голос
/ 15 июня 2010

Вы только выделили 20 байтов для входного буфера, но сказали fgets прочитать 20 байтов.

Сделайте это изменение:

  if (fgets(ara, sizeof(ara)-1, fp) == NULL){ 

запомните, если вы хотите, чтобы 20 символов ПЛЮСзавершающий символ '\ 0', обозначающий конец строки, которую вы должны выделить 21 байт.

...