使用getc逐行读取是行不通的

时间:2017-03-19 06:08:46

标签: c io

我需要从文件中逐行阅读这里是我的代码:

FILE *fp1;
    char c;
    int n = 500;
    int counter = 0 ;
    char *buffer;
    buffer = (char*) realloc(buffer, n);
    strcpy(buffer, "");
    fp1 = fopen("text.txt","r");

    if(fp1 == NULL)
    {
        perror("Error in opening file");
        return;
    }

 do
    {
        c = fgetc(fp1);
//My specification .. stop reading if you read E
        if( c == 'E' )
        {
            break ;
        }
        if (c == '\n') {
            printf("%s\n", buffer);
            counter=0;
            strcpy(buffer, "");
        }
        else{
            counter++;
/*handling overflow*/
            if (counter > n) {
                n+=100;
                buffer = (char*) realloc(buffer, n);
            }
            strncat(buffer, &c,1);

        }
    }while(!feof (fp1));

问题是代码无法正常工作,它会打印比原始文本文件更多的行。任何人都可以帮助澄清为什么?

P.S。我知道有getc()的替代品,但我需要使用它。

更新
我将缓冲区的初始化从原始更改为:

 char *buffer = NULL;

&安培;所有其他strcpy()到此:

 *buffer = NULL;

但仍然是同样的问题。

2 个答案:

答案 0 :(得分:0)

使用!feof(fp1)作为外部while循环条件。你没有检查文件的结尾。

答案 1 :(得分:0)

buffer = (char*)malloc(sizeof(char)* n);

我刚刚更改了缓冲区分配代码,保持其他所有内容相同。似乎对我来说很好。