Monkey Place

Не работает функция gets() в Visual Studio С++

В программировании, особенно на C++, не работающая функция может привести к множеству неприятностей. Одной из таких функций является gets(), которая не работает в Visual Studio.

Что такое функция gets()

Gets() является функцией ввода в С++, которая позволяет пользователю вводить строку с пробелами. Синтаксис функции выглядит следующим образом:

char* gets(char* str);

Данная функция заканчивает ввод данных, когда пользователь нажимает клавишу "ENTER". Хотя эта функция может быть удобной для приложений, которые требуют ввод строки без пробелов, использование её в Visual Studio может привести к ошибкам.

Почему функция не работает в Visual Studio

При использовании функции gets() в Visual Studio можно столкнуться с ошибкой "This function or variable may be unsafe". Это связано с тем, что данная функция не обрабатывает предельные условия, что может привести к переполнению буфера, что в свою очередь является уязвимостью безопасности.

Поэтому в более новых версиях Visual Studio, включая 2015 и более поздние, функция gets() стала устаревшей и не поддерживается. Вместо неё рекомендуется использовать функцию fgets(). Синтаксис функции выглядит следующим образом:

char* fgets(char* str, int num, FILE* stream);

Данная функция, наряду с строкой, полученной от пользователя, возвращает значение NULL при EOF или ошибке на входном потоке. Более того, она позволяет задать максимальный размер вводимой строки, что обеспечивает большую безопасность.

Итог

Не работающая функция gets() может привести к множеству проблем в С++. Однако, использование fgets() может устранить все ошибки, связанные с безопасностью и позволить сохранить функциональность ввода строки с пробелами. В большинстве случаев, предпочтительнее использовать fgets() вместо gets().