#include <stdio.h>
#include <stdlib.h>
int fn_Read_Line(char **line, size_t *num_chars);
int main(void)
{
char *linea;
size_t num_chars;
while (fn_Read_Line(&linea, &num_chars) && num_chars){
printf("Linea:%s", linea);
printf("Longitud:%u\n", num_chars);
free(linea);
}
return EXIT_SUCCESS;
}
int fn_Read_Line(char **line, size_t *num_chars)
{
const size_t block_size = 80;
char *temp;
size_t i, block;
int c;
*num_chars = 0;
if ((*line = malloc(block_size)) == NULL)
return 0;
block = block_size;
for (i = 0; (c = getchar()) != EOF && c != '\n'; i++){
if (i == block-2){
block += block_size;
if ((temp = realloc(*line, block)) == NULL)
return 0;
else
*line = temp;
}
(*line)[i] = c;
}
if (c == '\n')
(*line)[i++] = '\n';
(*line)[i] = '\0';
if ((*num_chars = i) == 0){
free(*line);
*line = NULL;
}
return 1;
}