![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 15.12.2010
Сообщений: 74
|
![]()
Есть кусок кода, который должен выводить двоичное представление введенного int-числа. Собственно, он его выводит, но, если N оставить 32, то после компиляции на стадии дебага Студия 2010 ругается на повреждение стека вокруг переменной binary выводом соответствующего окошка (рис. 1), но программа продолжает выполняться. Если при объявлении binary сделать [N+1], то мэссаджбокс не появляется, но в начале и в конце строки дописываются какие-то кракозябры. Собственно, кракозябры дописываются в любом случае, только во втором нет мэссаджбокса. Два вопроса:
1) Откуда берутся эти кракозябры и что с ними делать? 2) Почему ему не хватает 32-х позиций в массиве? Код:
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
![]() Код:
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 15.12.2010
Сообщений: 74
|
![]()
veniside
Протормозил, каюсь. Ну а с абракадаброй что? |
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 15.12.2010
Сообщений: 74
|
![]()
Ну же, друзья, на помощь.
Я до сих пор не понял. |
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
![]()
че ж непонятного, вроде всё уже рассказал:
Код:
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 15.12.2010
Сообщений: 74
|
![]()
Спасибо большое, так работает. Только я вот со строками редко встречался. Объясните пожалуйста, с чем это связано? \0, насколько я понимаю, это конец строки. А что происходит здесь?
Код:
|
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
![]()
да, \0 — это признак конца строки, если о нём не позаботиться, будет выводится любой мусор за строкой, пока случайно не встретится 0.
> А что происходит здесь здесь мы заносим в конец строки (в 33-й символ) признак конца строки. Остальные 32 символа заполняются '1' и '0'. Правило простое: если строка должна содержать N символов, то выделяется память под N + 1 символов, и в последний заносится \0.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 15.12.2010
Сообщений: 74
|
![]()
Всё понял, спасибо еще раз.
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Опять ерунда с авторизацией!!! | Русtam | PHP | 9 | 01.08.2011 01:19 |
проблема с заполнением массива | Freddi Krjuger | Общие вопросы C/C++ | 0 | 22.10.2010 18:12 |
Virtual Box и непонятная ерунда. | jojahti | Операционные системы общие вопросы | 1 | 09.10.2009 00:06 |
Проблема с заполнением | asd48 | Помощь студентам | 1 | 21.04.2009 00:21 |