33 / 25 / 7
Регистрация: 08.11.2008
Сообщений: 107
|
||||||
1 | ||||||
Stack around the variable 's' was corrupted05.07.2011, 17:55. Показов 17600. Ответов 26
Метки нет (Все метки)
Помогите разобраться! Не пойму почему иногда при использовании в программе переменных char при закрытии программы выскакует одна и та же ошибка:
0
|
05.07.2011, 17:55 | |
Ответы с готовыми решениями:
26
Stack around the variable 'b' was corrupted Stack around the variable was corrupted Stack around the variable was corrupted Stack around the variable was corrupted |
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
05.07.2011, 17:56 | 2 |
Вводится 6 или более символов?
0
|
Кошковед
521 / 509 / 63
Регистрация: 12.04.2010
Сообщений: 1,390
|
|
05.07.2011, 18:04 | 3 |
ога. за пределы вылез
после мятого символа - enter (шестой )
1
|
33 / 25 / 7
Регистрация: 08.11.2008
Сообщений: 107
|
|
05.07.2011, 18:10 [ТС] | 4 |
мда тупонул конкретно.. про ентер забыл) бывает..
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
||||||
05.07.2011, 18:16 | 5 | |||||
Безопасный способ (правда лишние символы остаются в буфере)
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
05.07.2011, 19:09 | 7 |
fasked, да, но счастья-то всё-равно нет
при вводе: 123 456 789 в строку правильно считается 123, а вот пропустится 456, хотя хотелось просто ограничить первое слово. В общем всё может оказаться сложнее.
0
|
Модератор
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
|
||||||
05.07.2011, 19:11 | 8 | |||||
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
05.07.2011, 19:19 | 9 |
А так и вовсе через пробел нельзя вводить. Да и если строка длинее 5, то только один символ выбрасывается из лишних, а остальные опять в следующую попадают. Вообще, пользователю, конечно, по башке надо надавать за некорректный ввод и программу завершить
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
||||||
05.07.2011, 19:34 | 11 | |||||
Ну вот неплохо было бы, если при помощи одного только scanf можно было реализовать нечто, аналогичное следующему коду:
0
|
Модератор
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
|
||||||
05.07.2011, 22:04 | 12 | |||||
grizlik78,
1
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
05.07.2011, 22:11 | 13 |
easybudda, ну, положим, проверять возврат scanf надо и в моём коде. Я тоже немножко негодяй Но buf[5] не эквивалент strlen(buf) > 5, так как прочитанное слово может оказаться коротким. Это перед scanf надо 0 в buf[5] писать. Да, тогда немножко эффективнее (что здесь не главное), но по-прежнему громоздко. Интересно, где смысл понятнее будет, в strlen(buf) или в buf[5]?
Но сам scanf, насколько понимаю, не позволяет определить перебор с заданной длинной строки.
0
|
Модератор
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
|
|
05.07.2011, 22:29 | 14 |
Если сначала строку не обнулить - то да, фигня получится.
не-а, просто вернёт 1, если в строку что-то запишется...
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
06.07.2011, 09:24 | 16 |
В том, что при вводе допустима любая строка (точнее слово) длиной от 0 до 5 символов. Ввод более длинного слова — ошибка.
0
|
Модератор
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
|
||||||
06.07.2011, 09:24 | 17 | |||||
accept,
Код
$ ./israel > ab cd Just ab
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
07.07.2011, 02:26 | 19 |
Правильно-правильно. Требуется ограничить ввод пятью символами и распознать ситуацию, когда вводится больше. Поэтому стоит %6s. А в буфере 7 байт как-раз потому, что '\0' сохраняется всегда.
0
|
Модератор
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
|
|
07.07.2011, 02:27 | 20 |
опять же
получилось так, не принципиально, можно и 6 написать...
0
|
07.07.2011, 02:27 | |
07.07.2011, 02:27 | |
Помогаю со студенческими работами здесь
20
stack around the variable was corrupted Stack around the variable 'arr' was corrupted Stack around the variable 'stat_c1' was corrupted Stack around the variable 'cif' was corrupted Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |