scanf («% [^ \ n] s», a) vs gets (a)

Мне сказали, что не следует использовать scanf, когда пользователь вводит строку. Вместо этого, перейдите к get () большинством экспертов, а также пользователями StackOverflow. Я никогда не спрашивал об этом в StackOverflow, почему нельзя использовать scanf over get для строк. Это не фактический вопрос, но ответ на этот вопрос очень ценится.

Теперь перейдем к актуальному вопросу. Я сталкивался с этим типом кода -

scanf("%[^\n]s",a); 

Это читает строку, пока пользователь не введет символ новой строки, рассматривая пробелы также как строку.

Есть ли проблема, если я использую

scanf("%[^\n]s",a);

а не получает?

Is звучит более оптимизированно, чем функция scanf, как звучит, get предназначен исключительно для обработки строк. Пожалуйста, дайте мне знать об этом.

Обновить

Этот ссылка помогла мне лучше понять это.