getline
        
       La librería GNU ofrece la función no estándar
      getline que hace sencilla la lectura de líneas:
#include <stdio.h> ssize_t getline(char **lineptr, size_t *n, FILE *stream);
Esta función lee una línea entera de stream,
      almacenando el texto (incluyendo el carácter de nueva línea y el de
      terminación) en un buffer y almacenando la dirección del buffer en
      *lineptr.  Antes de llamar a getline, tienes que
      colocar en *lineptr la dirección de un buffer de
      *n bytes de largo usando malloc.  Si este buffer
      no es lo suficientemente grande como para albergar la frase leída,
      getline hace el buffer más grande usando
      realloc, actualizando la nueva dirección en
      *lineptr y el tamaño en *n.  Si inicializas
      *lineptr a null y *n a cero,
      getline hace ese malloc por tí.
 Si todo ha ido bien, *lineptr es un
      char * que apunta al texto que se ha leido.  La función
      devuelve el número de caracteres leídos aunque sin contar el carácter '\0'
      de terminación (sí con el de nueva línea); 
 si ha habido algún error o
      se alcanza final de fichero, devuelve -1.
Siempre que tengas que leer una línea de
        texto del teclado, hazlo pues con getline; te
        evitarás cualquier problema posterior.
El siguiente programa muestra cómo usar
      getline para leer una línea de texto desde teclado de manera
      segura. Intenta teclear más de 10 caracteres, verás que
      getline lo gestiona correctamente, independientemente del
      número de caracteres que teclees.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #include <stdio.h>
#define TAM_MAXIMO 10
int main(void)
{
  ssize_t bytes_leidos;
  size_t numero_bytes;
  //ssize_t y size_t son sinónimos de unsigned int
  char *cadena;
  puts("Por favor, introduce una línea de texto:\n");
  /* Puedes pasar a getline los argumentos inicializados: */
  //numero_bytes = TAM_MAXIMO;
  //cadena = (char *) malloc (numero_bytes + 1);
  //bytes_leidos = getline(&cadena, &numero_bytes, stdin);
  
  /*O bien, más sencillo, poner el número a 0 y la cadena a NULL, para que él mismo te haga
  la reserva necesaria*/
  numero_bytes = 0;
  cadena = NULL;
  bytes_leidos = getline(&cadena, &numero_bytes, stdin);
  if (bytes_leidos == -1)
  {
    puts("Error.");
  }
  else
  {
    puts("La línea es:");
    puts(cadena);
  }
  free(cadena);
  return 0;
}
 | 
Comprueba con estas preguntas si has entendido este documento.
Indica la afirmación INCORRECTA respecto a la función getline: