#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *readLine(FILE *inFile) //Simply reads line in a text file till "\n"
{
char *line = realloc(NULL, 1);
char c;
int i=0;
while (!feof(inFile))
{
c = fgetc(inFile);
if (ferror(inFile)) printf("Error reading");
if (c == 10)
{
realloc(line,i+1);
line[i]= 10;
break;
}
realloc(line, i+1);
line[i++] = c;
}
return line;
}
int main(int argc,char **argv)
{
FILE *inFile;
inFile = fopen("testFile","r");
printf("%s",readLine(inFile));
printf("%s",readLine(inFile));
printf("%s",readLine(inFile));
return 0;
}
Если содержимое TestFile является: -Почему эта программа не показывает первую строку снова и снова?
abc
def
ghi
Три PRINTF заявления должны показать "ABC" три раза .. Но выход есть: -
abc
def
ghi
Я знаю, что я неправильно в концепции. Помощь Pls.
Ваше название и вопрос полностью противоречат друг другу. На какой вопрос вы спрашиваете? –
В дополнение к проблеме 'realloc' вы не должны вызывать' feof' как условие цикла. Вместо этого ваша структура цикла должна быть: 'int c;/* Обратите внимание, что это int, а не char */while ((c = fgetc (inFile))! = EOF) {/ * ... */' См. Http://c-faq.com/~scs /cclass/int/sx2h.html для объяснения. Кроме того, вместо того, чтобы изобретать колесо, рассмотрите возможность использования 'fgets', или если вы хотите, чтобы версия динамически распределяла буфер достаточно долго, чтобы удерживать всю строку, используйте функцию« ggets »общественного достояния Чака Фальконера: http: // cbfalconer.home.att.net/download/ggets.zip – jamesdlin
Хорошо. Я понимаю. Я прочитал c-faq .. thanx –