Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
7 / 6 / 6
Регистрация: 07.04.2012
Сообщений: 51
1

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

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

Author24 — интернет-сервис помощи студентам
C++
1
2
char *str1;
gets(str1);
Комментарий препода:
ОПАСНО. Переменная str1 НЕ ИНИЦИАЛИЗИРОВАНЫ.
Собственно вопрос: Справедлив ли комментарий препода и как сделать так, чтоб было правильно.
Ответ прошу обосновать.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.04.2012, 13:49
Ответы с готовыми решениями:

Delphi, визуальное программирование, функции, использование несколько объектов через функции
Здорово, ребята. Вот когда писал программку, возникла такая мысль - можно ли использовать одну и...

Возвращение результата функции bool и использование его в функции main()
У меня есть функция bool, которая имеет вид: bool Pisos(int row, int place) { if (...)...

Ввод данных в функции конструктора и использование их в перегруженной функции
Вот собственно код, как его исправить, что бы не было ошибки. Пишет что переменные не объявлены. ...

Использование функции как параметра другой функции
В задании указано, что функция P прибавляет значение функции ff к элементу массива, если он входит...

7
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
22.04.2012, 13:56 2
Цитата Сообщение от Mogost Посмотреть сообщение
Справедлив ли комментарий препода
Это даже не обсуждается

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

Добавлено через 2 минуты
Цитата Сообщение от Mogost Посмотреть сообщение
а если пользователь введет 256 и более символов, что делать?
она прочитает всю строку ставя символы в свободные ячейки....но если же придется выводить результат символов 257 и т.д то есть возможность что она их не прочитает даже....
0
7 / 6 / 6
Регистрация: 07.04.2012
Сообщений: 51
23.04.2012, 10:09  [ТС] 8
скажу еще если использовать printf в строках то она читает до пробела.... а что касается gets она считывает пробелы придавая им значение эл-та строки....скажу еще если использовать printf в строках то она читает до пробела.... а что касается gets она считывает пробелы придавая им значение эл-та строки....
Каким боком printf относится к заданному мной вопросу?
У меня вопрос о функции gets и памяти. А строку вывести можно сочетающейся с gets функцией puts
0
23.04.2012, 10:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.04.2012, 10:09
Помогаю со студенческими работами здесь

Использование массива из функции в другой функции
как использовать полученный массив в другой функции. к примеру в функции int Mass(char *fname)...

Использование нестатической функции в статической функции
Имеется функция которая наследуется классом. Но в классе есть еще статические классы внутри которых...

Использование значение функции в другой функции
Здарвствуйте.Задание:ввести три числа и программа выберает какое самое большой и самое маленькое и...

Использование переменной в функции другой функции
namespace ABCS { class Functions { public Functions() { } public...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru