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

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

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

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

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

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

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

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

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

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

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

Использование функции strtok - C++
Помогите разобраться с тремя строками кода которые закомментированы using namespace std; void inp(char); void tok(char, int, char*,...

Использование прототипа функции - C++
Привет форумчанам!Помогите пожалуйста! 1.Нужно написать функцию которая вычисляет максимальное и минимальное число массива введенного с...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
22.04.2012, 13:56     Использование функции gets #2
Цитата Сообщение от Mogost Посмотреть сообщение
Справедлив ли комментарий препода
Это даже не обсуждается

Цитата Сообщение от Mogost Посмотреть сообщение
как сделать так, чтоб было правильно.
Либо
а) выделить память
б) присвоить адрес, по которому память уже выделена.
И использовать fgets.
Nick Alte
Эксперт С++
1628 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,931
Завершенные тесты: 1
22.04.2012, 14:06     Использование функции gets #3
Комментарий преподавателя несправедливо мягок. В данном куске кода происходит попытка чтения строки в неизвестный адрес (изначально в str1 может оказаться что угодно). Проще всего (хотя и не лучше всего) воспользоваться массивом, размер которого заведомо достаточен для хранения строки:
C
1
2
char str1[256];
gets(str1);
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
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
22.04.2012, 14:30     Использование функции gets #5
Цитата Сообщение от Mogost Посмотреть сообщение
а если пользователь введет 256 и более символов, что делать?
Вылетать с сегфолтом.
Для таких случаев есть fgets, либо STL.
Nick Alte
Эксперт С++
1628 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,931
Завершенные тесты: 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
Еще ссылки по теме:

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

Использование функции MessageBoxA - C++
Решил после Delphi перейти на C++, сразу появилось сотня проблем, сначало пол часа пытался объявить переменную String, оказалось что первая...

Использование шаблона функции - C++
Есть рабочая програма, но преподаватель попросил её немного упростить. Прошу помочь. Всё приведу ниже. Задание: Осуществить циклический...

Использование функции rectPS - C++
Первый раз пишу программу с "rectPS" ,поэтому программа получилась не рабочей .Программа компилится ,но не работает, и у меня не получается...

Использование printf в функции - C++
Подскажите, пожалуйста: передаю в функцию два параметра для вывода void fun(string x, int y) { printf("%s%d",x,y); ...


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

Или воспользуйтесь поиском по форуму:
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
Ответ Создать тему
Опции темы

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