אתה טועה
gets היא בעייתית לא כי היא לא בודקת הקצאות זיכרון, אלא כי אין הגבלה למספר התווים שהיא יכולה לרשום. כלומר, אתה יכול לאלקץ מקום ל-128 תווים, אבל אם המשתמש יכתוב 129, זה יכתוב לך על המשתנים האחרים (במקרה הטוב). ע"י fgets אפשר לציין מה מקסימום התווים שייקלטו, וכך כל תו נוסף שהמשתמש יכתוב, ייזרק החוצה. scanf הוא רק יותר בעייתי. הרבה יותר bug-prone.