Si, con il tuo programma se inserisci oltre 19 caratteri da tastiera fai
crashare il mondo. L'argomento era giᅵ stato affrontato, puoi uscirne o
usando una funzione tipo 'getline()', come ti avevo detto, oppure utilizzi
una funzione come 'fgets()' con qualche accortezza..
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
typedef struct
{
char nome[20];
char cognome[20];
} dati;
dati *impiegato;
int c = 0;
impiegato = malloc(sizeof(dati));
printf("Nome [0 per uscire]: ");
fgets(impiegato->nome, 20, stdin);
while((c = getchar()) != '\n');
printf("Cognome [0 per uscire]: ");
fgets(impiegato->cognome, 20, stdin);
printf("%s\n", impiegato->nome);
printf("%s\n", impiegato->cognome);
free(impiegato);
return 0;
}
NB: la riga
while((c = getchar()) != '\n');
ti permette di non includere nella stringa successiva (cioᅵ
'impiegato->cognome') i caratteri che non possono rientrare nella
stringa 'impiegato->nome'.. almeno cosᅵ il programma non crasha mai..
PS: una svista da parte mia, 'fflush(stdin)' ᅵ assolutamente vietato,
porta ad undefined behavior.. 'fflush()' serve solo per gli stream
in output.
--
Vincenzo Mercuri