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


/* lecture de chaine de caracteres "sophistiquee" (il y a plus simple):
   allocation d'un petit tampon redimensionne (realloc) des saturation */


#define CLUSTER_SIZE 5


int 
main(void)
{
  int i = 0, freeslots = CLUSTER_SIZE, taille = CLUSTER_SIZE;
  char lu, *chaine;

  fflush(stdin); /* pas necessaire en premiere saisie */

  /* on alloue 5 caracteres a la chaine */
  chaine = (char *) calloc(CLUSTER_SIZE, sizeof(char));

  printf("\nsaisissez une chaine:");

  /* premiere lecture de caractere, 
     puis boucle tant que saisie != 'retour a la ligne' */
  for (scanf("%c",&lu); lu != '\n'; i++)
    {

      /* Si n x 5 caracteres ont deja ete saisis */
      if (! freeslots) { 
	/* on "rallonge" la chaine de 5 caracteres */
	chaine = realloc(chaine, taille + CLUSTER_SIZE); 
	taille += CLUSTER_SIZE;
	freeslots = CLUSTER_SIZE;

	printf("\nrealloc");
      }

      chaine[i] = lu; freeslots--;   
      scanf("%c",&lu);
    } 

  /* getchar() marche bien aussi */

  printf("\nChaine lue: %s ; de longueur %d", chaine, strlen(chaine));

  return EXIT_SUCCESS;
} 
