Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.63
Mogost
 Аватар для Mogost
7 / 7 / 1
Регистрация: 07.04.2012
Сообщений: 51
#1

Использование функции gets - C++

22.04.2012, 13:49. Просмотров 1065. Ответов 7
Метки нет (Все метки)

C++
1
2
char *str1;
gets(str1);
Комментарий препода:
ОПАСНО. Переменная str1 НЕ ИНИЦИАЛИЗИРОВАНЫ.
Собственно вопрос: Справедлив ли комментарий препода и как сделать так, чтоб было правильно.
Ответ прошу обосновать.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
22.04.2012, 13:56     Использование функции gets #2
Цитата Сообщение от Mogost Посмотреть сообщение
Справедлив ли комментарий препода
Это даже не обсуждается

Цитата Сообщение от Mogost Посмотреть сообщение
как сделать так, чтоб было правильно.
Либо
а) выделить память
б) присвоить адрес, по которому память уже выделена.
И использовать fgets.
Nick Alte
Эксперт С++
1599 / 991 / 117
Регистрация: 27.09.2009
Сообщений: 1,910
Завершенные тесты: 1
22.04.2012, 14:06     Использование функции gets #3
Комментарий преподавателя несправедливо мягок. В данном куске кода происходит попытка чтения строки в неизвестный адрес (изначально в str1 может оказаться что угодно). Проще всего (хотя и не лучше всего) воспользоваться массивом, размер которого заведомо достаточен для хранения строки:
C
1
2
char str1[256];
gets(str1);
Mogost
 Аватар для Mogost
7 / 7 / 1
Регистрация: 07.04.2012
Сообщений: 51
22.04.2012, 14:27  [ТС]     Использование функции gets #4
Цитата Сообщение от Nick Alte Посмотреть сообщение
Комментарий преподавателя несправедливо мягок. В данном куске кода происходит попытка чтения строки в неизвестный адрес (изначально в str1 может оказаться что угодно). Проще всего (хотя и не лучше всего) воспользоваться массивом, размер которого заведомо достаточен для хранения строки:
C
1
2
char str1[256];
gets(str1);
а если пользователь введет 256 и более символов, что делать?
diagon
Higher
 Аватар для diagon
1921 / 1187 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
22.04.2012, 14:30     Использование функции gets #5
Цитата Сообщение от Mogost Посмотреть сообщение
а если пользователь введет 256 и более символов, что делать?
Вылетать с сегфолтом.
Для таких случаев есть fgets, либо STL.
Nick Alte
Эксперт С++
1599 / 991 / 117
Регистрация: 27.09.2009
Сообщений: 1,910
Завершенные тесты: 1
22.04.2012, 15:42     Использование функции gets #6
Цитата Сообщение от Mogost Посмотреть сообщение
а если пользователь введет 256 и более символов, что делать?
Если ждёшь от пользователя такой подляны, надо пользоваться более совершенными способами. Например,
C++
1
2
std::string line;
std::getline(std::cin, line);
Я же ведь специально написал и что способ не лучший, а только самый простой, и что размер буфера должен заведомо превышать размер вводимой строки. Можно лепить буфер побольше, ограничивать ввод безопасными функциями и так далее.
РАСУЛл
2 / 2 / 0
Регистрация: 06.11.2011
Сообщений: 68
22.04.2012, 23:43     Использование функции gets #7
скажу еще если использовать printf в строках то она читает до пробела.... а что касается gets она считывает пробелы придавая им значение эл-та строки....

Добавлено через 2 минуты
Цитата Сообщение от Mogost Посмотреть сообщение
а если пользователь введет 256 и более символов, что делать?
она прочитает всю строку ставя символы в свободные ячейки....но если же придется выводить результат символов 257 и т.д то есть возможность что она их не прочитает даже....
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2012, 10:09     Использование функции gets
Еще ссылки по теме:

Использование функции sort C++
использование функции atof C++
C++ Использование функции strtok
C++ Использование функции fabs
Использование функции Gets() C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Mogost
 Аватар для Mogost
7 / 7 / 1
Регистрация: 07.04.2012
Сообщений: 51
23.04.2012, 10:09  [ТС]     Использование функции gets #8
скажу еще если использовать printf в строках то она читает до пробела.... а что касается gets она считывает пробелы придавая им значение эл-та строки....скажу еще если использовать printf в строках то она читает до пробела.... а что касается gets она считывает пробелы придавая им значение эл-та строки....
Каким боком printf относится к заданному мной вопросу?
У меня вопрос о функции gets и памяти. А строку вывести можно сочетающейся с gets функцией puts
Yandex
Объявления
23.04.2012, 10:09     Использование функции gets
Ответ Создать тему
Опции темы

Текущее время: 23:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru