用于从给定流中读取c中新行的函数

问题描述 投票:0回答:1

我正在尝试使用c函数从给定的FILE *中读取新行*让我们假设指针已被预先分配。

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



int getLine(char** string, FILE* stream);
int main(){
    char* a = (char*) malloc(10);
    getLine(&a, stdin);
    printf("%s\n", a);
    free(a);
    return 0;
}

int getLine(char** string, FILE* stream){
    char* tmp;
    unsigned laenge=0u;
    if (strlen(*string)>0)
    {   
        free(*string);
        *string = (char *) malloc(sizeof(char));
    }
    do
    {
        tmp=(char *)realloc(*string,++laenge);  
        if(tmp==NULL)
        {
            printf("Allokation fehlgeschlagen\n");
            free(*string);
        }
        *string=tmp;
        (*string)[laenge-1]=fgetc(stream);
        if (feof(stream))
        {   
            (*string)[laenge-1]='\0';
            return EOF;
        }
    }
    while((*string)[laenge-1]!='\n');
    (*string)[laenge-1]='\0';
    return laenge;

}

在我将其用于作业之前,我需要做到这一点,并且对此我只有一枪。

您的意见对我很有价值。

  1. 在这种情况下会发生内存泄漏吗?
  2. 使用这样的函数是一种好习惯吗?
  3. 我有什么遗漏吗?

如果可能有帮助,我必须坚持C89标准,而我正在使用gcc -ansi -pedantic -Wall来编译我的代码

c gcc c89
1个回答
0
投票

我建议使用fgets而不是尝试编写自己的函数来从FILE指针读取行,因为fgets最多将n个字符读入缓冲区字符串,并在遇到换行符时停止读取。

© www.soinside.com 2019 - 2024. All rights reserved.