Как да прочета в низ, предавайки знака за нов ред?

Трябва да прочета във файл като

apple
grape
banana

И го съхранявайте в низ, но fgets чете само до новия ред и спира, така че единственото му четене в apple.

Как да заобиколя това? Или как мога да съхраня трите думи като отделни низове?

char* readFile(const char *fileName)
{
    FILE *inFile;
    inFile=fopen(fileName, "r");

    char **stringInFile;
    stringInFile = malloc(sizeof(char*)*50);
    char *data = fgets(stringInFile,50,inFile);
    printf("%s", data);

    fclose(inFile);

    return data;
}

Всичко това е в C btw.


person Carson    schedule 28.03.2015    source източник
comment
Опитахте ли нещо? Търсихте ли отговор в интернет?   -  person lodo    schedule 29.03.2015
comment
@user3121023 това изглежда разточително... Той просто трябва да прочете трите низа и да ги свърже.   -  person lodo    schedule 29.03.2015


Отговори (1)


fgets() чете само един ред при всяко повикване и настройва файловия курс на следващия ред. Ако искате да прочетете целия файл, трябва да го итерирате. За да проверите дали сте в края, можете да проверите за EOF флага с feof() . В резултат на това за мен работи:

char* readFile(const char *fileName)
{
FILE *inFile;
inFile=fopen(fileName, "r");

char **stringInFile;
stringInFile = malloc(sizeof(char*)*50);
while(!feof(inFile))
{
  printf("%s", fgets(stringInFile,50,inFile));
}

fclose(inFile);

return stringInFile;
}

И нямате нужда от променливата data - първият параметър на fgets() е масив от знаци, къде се съхранява автоматично (например Apple във вашата програма).

person darksider    schedule 28.03.2015
comment
Важно е да се отбележи, че feof(fileptr) ще бъде вярно само ако наистина сте се опитали да прочетете след края на файла. fgets с радост ще върне последния ред, включително новия ред в края на файла, но feof ще бъде невярно. След това ще опитате друг fgets, който ще върне NULL, защото няма повече данни за четене и резултатът е printf("%s", NULL);, което може да срине вашата програма в segfault или да отпечата някакъв низ в зависимост от вашата C библиотека. Повече информация можете да намерите тук - person ; 29.03.2015