If you're only going to work on GNU systems (linux), you can use getline
char* line = NULL;
size_t len = 0;
ssize_t read = getline(&line, &len, fp)) != -1);
if( read != 0 )
{
// ...
}
free(line);
If this is not the case, you can read character character and resize the buffer on the fly:
char* readLine(FILE* fp)
{
size_t max_size = 100;
char* line = (char*)malloc(max_size *sizeof(char)); // Reserva inicial para 99 caracteres
size_t index = 0;
while(1)
{
char c = getc(fp);
if( c == EOF || c == '\n' )
break;
line[index] = c;
++index;
if( index == max_line )
line = (char*)realloc(line,max_line+100);
}
line[index] ='char* line = NULL;
size_t len = 0;
ssize_t read = getline(&line, &len, fp)) != -1);
if( read != 0 )
{
// ...
}
free(line);
'; // Finalizamos la cadena
return line;
}