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

Неправильно работает функция gets( ) - C++

Восстановить пароль Регистрация
 
tro9an
3 / 3 / 0
Регистрация: 30.11.2010
Сообщений: 59
Завершенные тесты: 1
10.03.2014, 23:21     Неправильно работает функция gets( ) #1
C++
1
2
3
4
5
6
7
8
.....
char *str = new char[ 10 ];
 
gets( str );
 
printf( "%s", str );
 
.....
Если ввести больше 9 символов, то по идее, на принтэфе программа должна вылететь, или вывести иероглифы после 10 символа.

Я ввожу около 60 символов, все выводит абсолютно нормально без иероглифов и вылетов, но ввиду чуть побольше, около 100, программа вылетает.
Что за магия?

Работаю в Visual Studio 2010.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.03.2014, 00:10     Неправильно работает функция gets( ) #2
Выход за границу массива компилятор не отслеживает. Будет вылет в процессе выполнения или нет, зависит от того, куда забредёт код, выйдя за границу массива. То что иероглифы не выводит, так и не будет. Будет выводить введённую строку (до '\0').
tro9an
3 / 3 / 0
Регистрация: 30.11.2010
Сообщений: 59
Завершенные тесты: 1
11.03.2014, 14:45  [ТС]     Неправильно работает функция gets( ) #3
Ещё вопрос:

C++
1
2
3
4
5
6
7
8
9
10
.....
 
char str[ 21 ];
 
gets( str );
 
if( strlen( str ) > 21)
 printf( "Error!" ); // здесь я отправлю пользователя на начало ввода
 
.....
Если я так сделаю, то пользователь будет вводить строку, пока не введёт правильно или гетс всё равно засунет символы куда не надо?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.03.2014, 16:54     Неправильно работает функция gets( ) #4
Цитата Сообщение от tro9an Посмотреть сообщение
или гетс всё равно засунет символы куда не надо?
Да. Есть другие функции, который больше чем нужно не введут. В С++ это, например, getline():
C++
1
2
char str[21];
cin.getline(str, 21);
Yandex
Объявления
11.03.2014, 16:54     Неправильно работает функция gets( )
Ответ Создать тему
Опции темы

Текущее время: 00:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru