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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 55, средняя оценка - 4.78
Diaskop
Сообщений: n/a
#1

Как выглядит нулевой байт? - C++

26.01.2012, 13:30. Просмотров 8212. Ответов 36
Метки нет (Все метки)

Масивы заканчиваются нулевым байтом "/0", это ясно - надо иметь признак конца, но ("/")= 0x2F и ("0")=0x30 , а это уже два байта.
Вопросы: 1. под "нулевым байтом" подразумевают два байта ?
2. если прочитать конец массива, увижу я 0x2F и 0x30?
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.01.2012, 13:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как выглядит нулевой байт? (C++):

strstream (Как записать теперь в s нулевой байт 0, чтобы он не интерпретировался с частью строки?) - C++
int main() { strstream s; s << "555"; cout << s.str() << endl; system("pause"); } Как записать теперь в s нулевой байт...

Как выглядит в си++ - C++
Program pravii; uses crt; var i,n:integer; a,b,h,x,xb,s:real; function...

как выглядит в си++ - C++
Program kursak; Const Nmax = 5; {Максимальный размер массива} Type Matrix = array of integer;; m:=m; ...

как выглядит в си++ - C++
var i,n:integer; a,b,h,x,xb,s:real; function f(x:real):real; begin f:=(1/x)*sin(3.14*x/2);

Как выглядит расшифровка Des? - C++
Помогите разобраться с расшифровкой, вот цитата из вики: . А в книги пишут что, нужно использовать ту же функцию, только ключи сдвигать...

Как выглядит адрес переменной - C++
Например: в массиве m={4,6,2} адрес второго элемента. Это будет 16-ричное число 0x06 ?

36
zelim
77 / 77 / 4
Регистрация: 26.12.2011
Сообщений: 217
26.01.2012, 14:11 #16
Цитата Сообщение от soon Посмотреть сообщение
zelim, сами же сказали

Пост читайте весь. Мой пример был именно к этой фразе.
Это уже своего рода предположение было Я же уточнил, что этим не интересовался и в подробности не вникал ))
Не подумал даже как-то над примером.
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
26.01.2012, 14:12 #17
Цитата Сообщение от Diaskop Посмотреть сообщение
Масивы заканчиваются нулевым байтом "/0", это ясно - надо иметь признак конца, но ("/")= 0x2F и ("0")=0x30 , а это уже два байта.
Во-первых не "/", а "\", а во вторых это просто спецсимвол, терминальный байт действительно нулевой, то есть 0x00.
0
soon
2541 / 1306 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
26.01.2012, 14:12 #18
Не, пример корявый был в #15
C
1
2
3
4
5
6
7
8
#include <stdio.h>
 
int main(void)
{
    char str[] = "0123\0 67";
    printf("%d\n", sizeof(str));
    return 0;
}
http://liveworkspace.org/code/c44a9a...26da32950ce01d
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
26.01.2012, 14:15 #19
Цитата Сообщение от zelim Посмотреть сообщение
Как-то не задавался этим вопросом, но думаю, что в конце будет стоять 0x30.
Нет. Если без слеша, то было бы 0x30, но слеш даже среди спецсимволов особый, он включает режим спецсимола для следующего и его код меняется. Например, t получает код 0x08, а но - код 0x00.
0
fasked
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
26.01.2012, 14:15 #20
Ой-вей http://ru.wikipedia.org/wiki/%D0%AD%...BB%D0%BE%D0%B2
0
zelim
77 / 77 / 4
Регистрация: 26.12.2011
Сообщений: 217
26.01.2012, 14:18 #21
Цитата Сообщение от soon Посмотреть сообщение
Не, пример корявый был в #15
C
1
2
3
4
5
6
7
8
#include <stdio.h>
 
int main(void)
{
    char str[] = "0123\0 67";
    printf("%d\n", sizeof(str));
    return 0;
}
http://liveworkspace.org/code/c44a9a...26da32950ce01d
http://liveworkspace.org/code/2e73a0...179979cdd04fe6
Отбрасывает все то, что после "0123", как я и говорил.
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
26.01.2012, 14:18 #22
Цитата Сообщение от zelim Посмотреть сообщение
Типичный пример того, как функция sizeof откидывает "мусор".
Так и любые другие функции при чтении массива ищут нуль-символ.
Сайзоф не ищет нуль-символ, да и функцию можно сделать также.
0
soon
2541 / 1306 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
26.01.2012, 14:19 #23
Цитата Сообщение от zelim Посмотреть сообщение
Отбрасывает все то, что после "0123", как я и говорил.
Дак вы же про sizeof говорили, мол она по нуль-терминанте высчитывает размер.
0
Teravisor
31 / 31 / 3
Регистрация: 07.08.2011
Сообщений: 89
26.01.2012, 14:20 #24
http://liveworkspace.org/code/7741b0...e0c0250b012582

Отбрасывается ТОЛЬКО при выводе(преобразовании в Си-строку). Массив после \0 никуда не девается, он продолжает хранится в памяти!
0
soon
2541 / 1306 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
26.01.2012, 14:20 #25
Нет, не вы, извиняюсь. Пост относился к Fusix
0
zelim
77 / 77 / 4
Регистрация: 26.12.2011
Сообщений: 217
26.01.2012, 14:23 #26
Цитата Сообщение от soon Посмотреть сообщение
Нет, не вы, извиняюсь. Пост относился к Fusix
В 14 посте я цитировал Fusix. Там про sizeof и было сказано.
0
soon
2541 / 1306 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
26.01.2012, 14:29 #27
Цитата Сообщение от zelim Посмотреть сообщение
В 14 посте я цитировал Fusix. Там про sizeof и было сказано.
Ааа, вот оно что. Тогда действительно еще и к вам вопрос
Цитата Сообщение от zelim Посмотреть сообщение
Типичный пример того, как функция sizeof откидывает "мусор".
И какой же мусор она откидывает?
0
Fusix
0 / 0 / 0
Регистрация: 08.10.2010
Сообщений: 133
26.01.2012, 14:39 #28
Цитата Сообщение от zelim Посмотреть сообщение
В 14 посте я цитировал Fusix. Там про sizeof и было сказано.
Я с такой проблемой сталкивался, что sizeof определяет размер до первого 0x00. Теперь я ему не доверяю работу с буферами... Но я хотел сказать то, что массив char он можно сказать охватывает всю память. У него есть адрес начала, а дальше по индексу в сторону увеличения и до конца памяти. Если размер статический, то это уже не важно. Из моего опыта 0x00 считается концом строки и по нему обрезается. Если это не строка, а набор байт, то в нем уже необходимости нет.

Добавлено через 54 секунды
Цитата Сообщение от soon Посмотреть сообщение
Ааа, вот оно что. Тогда действительно еще и к вам вопрос

И какой же мусор она откидывает?
Она мусор не откидывает ИМХО. Просто возвращает размер до первого нулевого байта
0
Teravisor
31 / 31 / 3
Регистрация: 07.08.2011
Сообщений: 89
26.01.2012, 14:43 #29
Цитата Сообщение от Fusix Посмотреть сообщение
Я с такой проблемой сталкивался, что sizeof определяет размер до первого 0x00. Теперь я ему не доверяю работу с буферами... Но я хотел сказать то, что массив char он можно сказать охватывает всю память. У него есть адрес начала, а дальше по индексу в сторону увеличения и до конца памяти. Если размер статический, то это уже не важно. Из моего опыта 0x00 считается концом строки и по нему обрезается. Если это не строка, а набор байт, то в нем уже необходимости нет.
Вы наверно с указателями баловались? Тогда это всё объясняет.

Цитата Сообщение от Fusix Посмотреть сообщение
Она мусор не откидывает ИМХО. Просто возвращает размер до первого нулевого байта
См. мою ссылку. Там sizeof выдает 12 - почему?
0
zelim
77 / 77 / 4
Регистрация: 26.12.2011
Сообщений: 217
26.01.2012, 14:47 #30
Цитата Сообщение от soon Посмотреть сообщение
И какой же мусор она откидывает?
Имел ввиду, что то, что находится за спец. символом, функция не считает. Ориентировался на пример Fusix. Вы же показали, что это не так (правда в первом примере, вроде пост 15, который удалили, sizeof все-таки неправильно посчитал вроде бы).
Под мусором имел ввиду символы, занимающие ячейки памяти. Например, будет у нас строка "01234" - присвоим третьему (произвольно) элементу массива значение '\0' - функции вида printf будут выдавать "01", считая "34" мусором. Я это подразумевал.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.01.2012, 14:47
Привет! Вот еще темы с ответами:

Как выглядит string в памяти? - C++
Задался вопросом как вы глядит стринг в памяти? С чаром все понятно, а стринг? Где-то должен валятся указатель, а что еще? Я так понимаю...

Как в блок-схеме выглядит структура? - C++
Как в блок-схеме выглядит структура?

Как выглядит код грамматики Хомского? - C++
Как выглядит код грамматики Хомского?

Как выглядит конструктор и деструктор для vector ? - C++
Есть класс: class table_m { public: vector &lt;Item&gt; table; table_m(); }; Как будет выглядеть для него конструктор и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Yandex
Объявления
26.01.2012, 14:47
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru