Questa non l'ho capita. Me la spieghi? La limitazione del numero dei caratteri inseriti nel buffer è effettiva, mentre in gets() è completamente assente... perché dici che danno potenzialmente gli stessi problemi?
7iFF non vuole sostituire la scanf() con una gets() perchè dice che "non è sicura", senza considerare che neanche scanf() lo è (a meno di non usare una particolare stringa di formato).
Di base scanf() non è sicura come non lo è gets() perchè non ci sono controlli sulla dimensione delle stringhe (a meno di non usare una particolare stringa di formato); cosa succede in questo caso se inserisco più di 10 caratteri:
char str[10];
scanf("%s", str);