5 / 5 / 1
Регистрация: 25.10.2013
Сообщений: 230
|
|
1 | |
Что если число будет слишком большим и не поместиться в int?17.03.2014, 05:23. Показов 10776. Ответов 37
Метки нет (Все метки)
Собственно есть char*, надо в int. Вроде есть atoi для этих целей. Но тут появляется пара неудобных вопросов:
1) Что если число будет слишком большим и не поместиться в инт? 2) Скорее теоретически, т.к. не цифры отсекаются при формировании входного char*, но тем не менее: что если в char* будут не только цифры? Спасибо.
0
|
17.03.2014, 05:23 | |
Ответы с готовыми решениями:
37
Что будет если к пустой строке применить strtoint. Какое число будет присвоено? Что произойдет, если число будет больше максимального допустимого данным типом? Что будет выведено на экран в результате работы программы, если введено число 20? Что будет, если установленная ОЗУ будет от разных производителей? |
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||||||
17.03.2014, 16:46 | 25 | |||||
Тут не строковый поток надо смотреть, а operator>>(int&) и т.п. для std::istream. На тесте:
видно, что при переполнении fail() возвращает true.
1
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
18.03.2014, 12:30 | 29 |
22.4.2.1.2/3 Stage 3:
1
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
18.03.2014, 13:04 | 31 |
Так UB на то и UB, что может быть и такой вариант
Добавлено через 7 минут Посмотрел в С++03 22.2.2.1.2/11:
1
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
18.03.2014, 13:20 | 33 |
2010 и 2012 студии ведут себя одинаково. При выходе из диапазона значение переменной не меняют (т.е. внутри они конечно возвращают LONG_MIN или LONG_MAX, но до пользователя оно не доходит), устанавливают errno = ERANGE;
Можете сами попробовать пройтись отладчиком. Разговор про UB был относительно atoi(), если я ничего не путаю. А при чтении числа из потока (std::istream) atoi() не используется по факту. Есть фактически нечто похожее на требование C++11 (всякие _Stoulx() вместо std::strtoull()), но итоговое поведение не соответствует C++11.
1
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
18.03.2014, 13:49 | 35 |
atoi() это сишная функции и описание следует смотреть в сишном стандарте уже. Вот в C99 такое есть:
7.20.1 Numeric conversion functions:
1
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
18.03.2014, 14:40 | 37 |
Как себя ведёт студия, надо смотреть в доке по студии.
http://msdn.microsoft.com/en-u... xkb5c.aspx
1
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
18.03.2014, 14:51 | 38 |
Значит, в студии, это не UB.
0
|
18.03.2014, 14:51 | |
18.03.2014, 14:51 | |
Помогаю со студенческими работами здесь
38
Что будет выводить puts, если в конце строки не будет нулевого байта Что будет если СО будет двигаться навстречу свету? Теоретически! Если на сайте не будет не какой текстовой информации то и найти на нём что то будет не возможным (внутри)? Что делать с preloader-ом, если запрос произошёл слишком быстро? Подскажите что делать, если слишком долгая загрузка WIN 8.1 X64 что будет если отключить встроеный видеоадаптер через деспечер устройств если дескретной видеокарты нет? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |