@Midzakikayo

Как правильно получить ввод строки от пользователя в Cи?

Всем добра! Встала необходимость освоить язык Си. Но столкнулся с сложностью в понимании того как получить ввод текста от пользователя ведь в Си как я понимаю отсутствует понятие string(строки). Полазив по форумам понял что можно изобразить конструкцию.

char buffer[20];
printf("Введите Ваше имя: ");
scanf_s("%5s", buffer);


Итогом выпадает исключение:
Вызвано исключение по адресу 0x7C72EFDE (ucrtbased.dll) в Project3.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0x00DE1000.

Потратил два вечера и пока даже не приблизился к пониманию ситуации...
при попытке использовать scanf:
Ошибка 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

#define _CRT_SECURE_NO_WARNINGS - не помогает

Ребята прошу помогите! Как понять в чём проблема и где можно почитать чтобы в дальнейшем не возникло подобных проблем?
  • Вопрос задан
  • 111 просмотров
Решения вопроса 1
@res2001
Developer, ex-admin
В scanf_s при задании ввода строки, нужно указывать, кроме адреса буфера еще и реальный размер буфера в параметрах. Смотрите пример использования тут: https://en.cppreference.com/w/c/io/fscanf
Обычный scanf считается не безопасным, и не без оснований, конечно. Поэтому его использование не рекомендуется, о чем в сообщении и пишут. Но это можно обойти, как именно, написано в том же сообщении. Правда задание _CRT_SECURE_NO_WARNINGS влияет не только на использование scanf, но и на пачку других функций.
Определять #define _CRT_SECURE_NO_WARNINGS нужно до включения любых заголовков стандартной библиотеки. Что бы это определение на них подействовало. Проще всего это сделать в параметрах командной строки компилятора с помощью опции -D_CRT_SECURE_NO_WARNINGS
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы