С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

C++
1
2
char *str1;
gets(str1);
Комментарий препода:
ОПАСНО. Переменная str1 НЕ ИНИЦИАЛИЗИРОВАНЫ.
Собственно вопрос: Справедлив ли комментарий препода и как сделать так, чтоб было правильно.
Ответ прошу обосновать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2012, 13:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Использование функции gets (C++):

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

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

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

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

Использование функции - C++
Не могли бы помочь решить вот это задание? И подскажите где можно прочитать о функциях, передаче данных при вызове функции....

Использование функции - C++
Я должен посчитать сколько букв в каждой строке с использованием функции int countAccurance(char arr, char ch). Но вывод должен быть в...

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

Цитата Сообщение от Mogost Посмотреть сообщение
как сделать так, чтоб было правильно.
Либо
а) выделить память
б) присвоить адрес, по которому память уже выделена.
И использовать fgets.
0
Nick Alte
Эксперт С++
1642 / 1014 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
22.04.2012, 14:06 #3
Комментарий преподавателя несправедливо мягок. В данном куске кода происходит попытка чтения строки в неизвестный адрес (изначально в str1 может оказаться что угодно). Проще всего (хотя и не лучше всего) воспользоваться массивом, размер которого заведомо достаточен для хранения строки:
C
1
2
char str1[256];
gets(str1);
0
Mogost
7 / 6 / 1
Регистрация: 07.04.2012
Сообщений: 51
22.04.2012, 14:27  [ТС] #4
Цитата Сообщение от Nick Alte Посмотреть сообщение
Комментарий преподавателя несправедливо мягок. В данном куске кода происходит попытка чтения строки в неизвестный адрес (изначально в str1 может оказаться что угодно). Проще всего (хотя и не лучше всего) воспользоваться массивом, размер которого заведомо достаточен для хранения строки:
C
1
2
char str1[256];
gets(str1);
а если пользователь введет 256 и более символов, что делать?
0
diagon
Higher
1932 / 1198 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
22.04.2012, 14:30 #5
Цитата Сообщение от Mogost Посмотреть сообщение
а если пользователь введет 256 и более символов, что делать?
Вылетать с сегфолтом.
Для таких случаев есть fgets, либо STL.
0
Nick Alte
Эксперт С++
1642 / 1014 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
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
Mogost
7 / 6 / 1
Регистрация: 07.04.2012
Сообщений: 51
23.04.2012, 10:09  [ТС] #8
скажу еще если использовать printf в строках то она читает до пробела.... а что касается gets она считывает пробелы придавая им значение эл-та строки....скажу еще если использовать printf в строках то она читает до пробела.... а что касается gets она считывает пробелы придавая им значение эл-та строки....
Каким боком printf относится к заданному мной вопросу?
У меня вопрос о функции gets и памяти. А строку вывести можно сочетающейся с gets функцией puts
0
23.04.2012, 10:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2012, 10:09
Привет! Вот еще темы с ответами:

использование функции! - C++
В матрице A(5,3) найти наибольший элемент.Решить эту задачу нужно с использованием функции!!Люди добрые помогите пожалуйста!!!

Использование функции. - C++
помогите переделать программу нужно использовать функцию #include <math.h> #include <iostream.h> #include<fstream.h> ...

Использование функции Gets() - C++
Помогите переделать данный код, чтобы вводить str не через функцию cin, а через функцию gets() #include <iostream> #include <string>...

Использование функции rand() - C++
Доброго времени суток, при использовании библиотечной функции rand() (которая должна генерировать случайное число, как я понимаю)...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.