|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
09.09.2010, 22:54 | #1 |
Пользователь
Регистрация: 29.03.2010
Сообщений: 21
|
getline
Здравствуйте.
Натолкнулся на проблемы с cin.getline. При введении большего кол-ва символов, чем дозволяет второй параметр, команда в цикле на второй раз выполняться уже категорически отказывается, в результате цикл загоняется. Кто виноват и что делать? Код:
|
09.09.2010, 23:14 | #2 | |
Форумчанин
Регистрация: 09.03.2008
Сообщений: 127
|
Цитата:
После Код:
Код:
|
|
09.09.2010, 23:15 | #3 |
Пользователь
Регистрация: 05.08.2010
Сообщений: 44
|
Код:
Хочеш змінити світ - почни з себе.(Марк Аврелій)
|
09.09.2010, 23:18 | #4 | |
Форумчанин
Регистрация: 09.03.2008
Сообщений: 127
|
Цитата:
Потом ошибки в программе, переполнение буфера.. эксплоиты и т.д.?? |
|
09.09.2010, 23:22 | #5 |
Пользователь
Регистрация: 05.08.2010
Сообщений: 44
|
Ну да,вы правы,что то я поспешыл с выводом)
Хочеш змінити світ - почни з себе.(Марк Аврелій)
|
09.09.2010, 23:27 | #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. |
09.09.2010, 23:46 | #7 |
Пользователь
Регистрация: 05.08.2010
Сообщений: 44
|
А если так ?
Код:
Хочеш змінити світ - почни з себе.(Марк Аврелій)
|
09.09.2010, 23:53 | #8 |
Пользователь
Регистрация: 29.03.2010
Сообщений: 21
|
2rik_nel
Красиво, но.... я ввожу "1234567890123456aaa", затем "aaa" получаю true |
09.09.2010, 23:55 | #9 |
Пользователь
Регистрация: 05.08.2010
Сообщений: 44
|
ГГм,и че он так ?
Хочеш змінити світ - почни з себе.(Марк Аврелій)
|
10.09.2010, 00:00 | #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 |