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

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

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

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

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

Масивы заканчиваются нулевым байтом "/0", это ясно - надо иметь признак конца, но ("/")= 0x2F и ("0")=0x30 , а это уже два байта.
Вопросы: 1. под "нулевым байтом" подразумевают два байта ?
2. если прочитать конец массива, увижу я 0x2F и 0x30?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
26.01.2012, 14:48 #31
Цитата Сообщение от Teravisor Посмотреть сообщение
Вы наверно с указателями баловались? Тогда это всё объясняет.
Тогда бы возвращался sizeof(char*). Т.е. всегда определенное число, а не "до первого \0".

Fusix, приведите код, в котором sizeof выводит не то, что требуется.
0
Fusix
0 / 0 / 0
Регистрация: 08.10.2010
Сообщений: 133
26.01.2012, 14:49 #32
Цитата Сообщение от Teravisor Посмотреть сообщение
Вы наверно с указателями баловались? Тогда это всё объясняет.



См. мою ссылку. Там sizeof выдает 12 - почему?
Понятно. Спасибо за пояснение.
0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
26.01.2012, 14:50 #33
Цитата Сообщение от zelim Посмотреть сообщение
правда в первом примере, вроде пост 15, который удалили, sizeof все-таки неправильно посчитал вроде бы).
Там была не нуль-терминанта, а \056. Пробел просто не поставил.
0
go
Эксперт С++
3586 / 1366 / 129
Регистрация: 16.04.2009
Сообщений: 4,528
26.01.2012, 14:55 #34
Цитата Сообщение от zelim Посмотреть сообщение
значение '\0' - функции вида printf будут выдавать "01", считая "34" мусором. Я это подразумевал.
Мусор, это то, что находится по адресу, большему(или равному) чем
C++
1
s + sizeof(s);
0
Fusix
0 / 0 / 0
Регистрация: 08.10.2010
Сообщений: 133
26.01.2012, 15:00 #35
Цитата Сообщение от soon Посмотреть сообщение
Тогда бы возвращался sizeof(char*). Т.е. всегда определенное число, а не "до первого \0".

Fusix, приведите код, в котором sizeof выводит не то, что требуется.
Да все верно, я тогда указатели испрользовал. Вот:
C++
1
2
3
4
5
6
7
   char *s = new char[5];
   s[0] = 0xff;
   s[1] = 0xff;
   s[2] = 0x00;
   s[3] = 0xff;
   s[4] = 0xff;
   printf("%d\n",sizeof(s));
0
Teravisor
31 / 31 / 3
Регистрация: 07.08.2011
Сообщений: 89
26.01.2012, 15:04 #36
Цитата Сообщение от Fusix Посмотреть сообщение
Да все верно, я тогда указатели испрользовал. Вот:
C++
1
2
3
4
5
6
7
   char *s = new char[5];
   s[0] = 0xff;
   s[1] = 0xff;
   s[2] = 0x00;
   s[3] = 0xff;
   s[4] = 0xff;
   printf("%d\n",sizeof(s));
Execution output:
4

а нулик то после 2го элемента... выдало sizeof(char*) - т.е. размер указателя, обычно int по размеру, т.е. 4.
0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
26.01.2012, 15:05 #37
Цитата Сообщение от Fusix Посмотреть сообщение
Да все верно, я тогда указатели испрользовал. Вот:
И? Выводит sizeof(char*), как я и сказал в посте #31

Замените s[2] = 0x00; на s[0] = 0x00; и увидите, что sizeof никоим образом не зависит от расположения нуль-терминанты
0
26.01.2012, 15:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.01.2012, 15:05
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Опции темы

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