Salve a tutti (mi sono appena registrato )

Sono alle prime armi con il C, e sto leggendo il K&R che immagino la maggior parte di voi conosca.
Sto provando a svolgere gli esercizi proposti dal testo pero', dal momento che non vi sono le soluzioni, non ho modo di verificare se quanto scrivo sia una buona soluzione.
Vorrei quindi chiedervi, se possibile, se potete dare uno sguardo al codice che segue (esercizio 1.13 del testo); il programma funziona, vi chiedo di darmi consigli/correzioni/giudizi, se potevo trovare soluzioni piu' sintetiche, se vi sono errori di concetto, se il codice e' troppo ermetico o troppo prolisso e, in generale, tutto quello che notate.

Grazie

codice:
/* Si scriva un programma che visualizzi un istogramma
   della lunghezza delle parole contenute nel testo in
   ingresso. E' facile disegnare un istogramma che si
   sviluppa in orizzontale, mentre richiede maggior
   abilita' tracciarlo in verticale */

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

#define MAX_LENGTH 10

int main()
{

  int i, k;
  int contatore[MAX_LENGTH];
  char *buffer = (char *)malloc(MAX_LENGTH*sizeof(char));;
  char c;

  for (i=0; i < MAX_LENGTH; i++) {
    contatore[i] = 0;
  }

  printf("\nInserire del testo con parole di lunghezza massima 10.\n");
  printf("Per terminare l'inserimento scrivere fine.\n\n");

  i=0;
  while (strcmp(buffer, "fine")) {
    c = getchar();
    if (c != ' ' && c != '\t' && c != '\n') {
      buffer[i] = c;
      i++;
    } else {
      buffer[i] = '\0';
      if (strcmp(buffer, "fine")) {
        contatore[strlen(buffer)-1]++;
      }
      i=0;
    }
  }
  free(buffer);

  printf("\nIstogramma orizzontale della lunghezza delle parole inserite:\n\n");

  for (i=0; i < MAX_LENGTH; i++) {
    printf("Parole di lunghezza %d:\t", i+1);
    if (contatore[i]) {
      for (k=0; k < contatore[i]; k++) {
        printf("*");
      }
    }
      printf("\n");
  }
  
  return 0;

}