gets is from simpler times (think 60s and 70s) when security issues weren't really a huge concern. Only after it was exploited time and again did the lightbulb come on and gets was officially deprecated as well as unofficially discouraged by everyone with any claim to proficiency in C. gets survived up until the most recent standard (C11) for simple fear of breaking existing code. The short answer is just because something exists doesn't mean it's a good idea. There could be legitimate historical reasons that keep a bad idea from the death it deserves.
if gets didnt useful, useless being, crap, why the c developer making gets() if it isnt for used?
thats what all i want to say for the long debating