per capire, considera come è disposta la memoria di un programma in esecuzione:
prima vengono i dati, poi il codice eseguibile.
se tu dichiari che una char[] deve essere lunga 10 e questa stringa la deve inserire l'utente, poi sta a te controllare che non superi il tetto dei 10.. dal momento in cui in C non si genera un errore al superamento di tale limite, e nè il compilatore ti avverte di tale pericolo.
cosa succede se l'utente inserisce un parametro più lungo?
ipoteticamente va a asovrascrivere la memoria dedicata a contenere il puntamento alla prossima funzione da eseguire, o addirittura il corpo stesso del programma in memoria.
qui, un 'utente' con le OO corazzate di iridio.. se riesce a vedere lo stato della memoria, può inserire un parametro lungo 10 + opcodes che vengono interpretati correttamente dalla macchina, e magari fare in modo che la macchina esegua una funzione scelta da lui.. con i risultati che puoi immaginare.
il minimo che può succedere, se l'errore non è stato provocatomaliziosamente, è che il programma cessa di funzionare.