![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 29.03.2010
Сообщений: 21
|
![]()
Здравствуйте.
Натолкнулся на проблемы с cin.getline. При введении большего кол-ва символов, чем дозволяет второй параметр, команда в цикле на второй раз выполняться уже категорически отказывается, в результате цикл загоняется. Кто виноват и что делать? Код:
|
![]() |
![]() |
![]() |
#2 | |
Форумчанин
Регистрация: 09.03.2008
Сообщений: 127
|
![]() Цитата:
После Код:
Код:
|
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 05.08.2010
Сообщений: 44
|
![]() Код:
Хочеш змінити світ - почни з себе.(Марк Аврелій)
|
![]() |
![]() |
![]() |
#4 | |
Форумчанин
Регистрация: 09.03.2008
Сообщений: 127
|
![]() Цитата:
Потом ошибки в программе, переполнение буфера.. эксплоиты и т.д.?? ![]() |
|
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 05.08.2010
Сообщений: 44
|
![]()
Ну да,вы правы,что то я поспешыл с выводом)
Хочеш змінити світ - почни з себе.(Марк Аврелій)
|
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 29.03.2010
Сообщений: 21
|
![]()
2|{ot
getline второй раз видимо не выполняется. Во всяком случае если ввести более 7 символов, то цикл в дальнейшем будет шпарить false-ами ничего от пользователя не запрашивая. А что писать-то в параметры ignore? cin.ignore(7,' '); не помогло. Как и cin.ignore(7,'\n'); По-моему это немного не та степь. 2rik_nel Здорово конечно, но мне нужно исправить уязвимость (изначально вместо getline стоял gets), не меняя самих переменных. К тому же такое решение вызовет проблему на strcmp ![]() О, ну вот. вроде как разрулил. После гетлайна надо было добавить Код:
![]() Спасибо за участие ![]() Последний раз редактировалось Stilet; 10.09.2010 в 13:15. |
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 05.08.2010
Сообщений: 44
|
![]()
А если так ?
Код:
Хочеш змінити світ - почни з себе.(Марк Аврелій)
|
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 29.03.2010
Сообщений: 21
|
![]()
2rik_nel
Красиво, но.... я ввожу "1234567890123456aaa", затем "aaa" получаю true ![]() |
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 05.08.2010
Сообщений: 44
|
![]()
ГГм,и че он так ?
Хочеш змінити світ - почни з себе.(Марк Аврелій)
|
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 29.03.2010
Сообщений: 21
|
![]()
Это стек. Мы объявили пасс раньше чем буф. Значит у буфа адреса младше. Размер буфа больше 2, но меньше 16. Под него отведено 16 байт, а сразу за ним лежит пасс. Вводим 16 символов чтобыдобраться до пасс и еще что-нибудь чтобы его затереть
![]() Как я уже написал, проблема решается через cin.fail(). Ну или что более находчиво - объявлением буф раньше, чем пасс ![]() |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Не работает с первого раза getline | AxenicX | Помощь студентам | 2 | 28.11.2009 23:43 |
Функция С++ getline() | Golovastik | Общие вопросы C/C++ | 8 | 30.07.2009 00:20 |
Проблема с функцией cin.getline. Подскажите советом. | (*_*) | Общие вопросы C/C++ | 3 | 04.03.2009 22:43 |