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

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

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

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

26.01.2012, 13:30. Просмотров 8555. Ответов 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
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
26.01.2012, 13:36 #2
Цитата Сообщение от Diaskop Посмотреть сообщение
Масивы заканчиваются нулевым байтом "/0", это ясно
Я такого не слышал.
0
Pavel.fromBy
13 / 13 / 1
Регистрация: 31.12.2011
Сообщений: 83
26.01.2012, 13:42 #3
Массивы (обычные) ничем не заканчиваются. Массив символов с '\0' (именно одинарные) - строка в стиле C. А \ - спец. символ по-моему.
0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
26.01.2012, 13:42 #4
Цитата Сообщение от Diaskop Посмотреть сообщение
"/0"
Так то \0.
Цитата Сообщение от Diaskop Посмотреть сообщение
1. под "нулевым байтом" подразумевают два байта ?
2. если прочитать конец массива, увижу я 0x2F и 0x30?
Нет. Нет.

Вот для раздумий.
C
1
2
3
4
5
6
7
#include <stdio.h>
 
int main(void)
{
    printf("%d", '\0');
    return 0;
}
1
zelim
77 / 77 / 4
Регистрация: 26.12.2011
Сообщений: 217
26.01.2012, 13:54 #5
Цитата Сообщение от Pavel.fromBy Посмотреть сообщение
А \ - спец. символ по-моему.
Да, это спец. символ.
Тем самым мы даем знать, что это не очередной символ, а уже конец файла.
Как-то не задавался этим вопросом, но думаю, что в конце будет стоять 0x30.
0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
26.01.2012, 13:57 #6
Цитата Сообщение от zelim Посмотреть сообщение
Как-то не задавался этим вопросом, но думаю, что в конце будет стоять 0x30.
Ага. Т.е. такая строка "1230567" при выводе будет отрубаться на "123"?
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
26.01.2012, 13:57 #7
Цитата Сообщение от zelim Посмотреть сообщение
Тем самым мы даем знать, что это не очередной символ, а уже конец файла.
Что? А если так
C++
1
"wfde\t\n\tsaf\tsafssad"
Нет, Вы не правы.
0
cyberguz
6 / 6 / 0
Регистрация: 01.12.2010
Сообщений: 105
26.01.2012, 13:58 #8
для раздумий лучше:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
int main(void)
{
    char a[] = "abcd /0 123 \r\t\n \x78 \\ \0 ";
 
    for (unsigned int i = 0; i < sizeof(a)/sizeof(*a); i++)
       printf("a[%d] = 0x%02X \n", i, a[i]);
 
    return 0;
}
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
26.01.2012, 13:58 #9
Цитата Сообщение от zelim Посмотреть сообщение
Как-то не задавался этим вопросом, но думаю, что в конце будет стоять 0x30.
нуль-терминал
C++
1
0 == '\0'
C++
1
NULL == 0x00
http://ru.wikipedia.org/wiki/%D0%9D%...BE%D0%BA%D0%B0
0
Fusix
0 / 0 / 0
Регистрация: 08.10.2010
Сообщений: 133
26.01.2012, 14:00 #10
Массив не чем не кончается. Это char кончается нулевым байтом, но можно прочитать и следующие, зная его номер. Пример:
Массив 0x11 0x77 0xff 0x00 0x2f 0x90
sizeof выдаст при этом 2. Но можно прочитать 0x90 с помощью [6] или 0x2f [5]
Нулевой байт - 0x00
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
26.01.2012, 14:00 #11
Цитата Сообщение от Fusix Посмотреть сообщение
sizeof выдаст при этом 2.
Например?
0
zelim
77 / 77 / 4
Регистрация: 26.12.2011
Сообщений: 217
26.01.2012, 14:05 #12
Цитата Сообщение от soon Посмотреть сообщение
Ага. Т.е. такая строка "1230567" при выводе будет отрубаться на "123"?
Я, вообще-то, имел ввиду, что нуль + '\' даст такой результат.
При чтении строки такого вида "123\0567" мы получим 123 - "остальное", т.е. то, что за '\0', считается мусором.

Цитата Сообщение от go Посмотреть сообщение
Что? А если так
Код C++
1
"wfde\t\n\tsaf\tsafssad"
Нет, Вы не правы.
А где здесь нуль-символ? Читайте меня внимательнее, я имел ввиду комбинацию, а не один слеш.
Придирка неудачна, я прав.

Добавлено через 1 минуту
Цитата Сообщение от zelim Посмотреть сообщение
Да, это спец. символ.
Тем самым мы даем знать, что это не очередной символ, а уже конец файла.
То есть то, что за слешем - уже не просто цифра ноль. Как-то так в общем.
0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
26.01.2012, 14:07 #13
zelim, сами же сказали
Цитата Сообщение от zelim Посмотреть сообщение
думаю, что в конце будет стоять 0x30.
Пост читайте весь. Мой пример был именно к этой фразе.
0
zelim
77 / 77 / 4
Регистрация: 26.12.2011
Сообщений: 217
26.01.2012, 14:08 #14
Цитата Сообщение от Fusix Посмотреть сообщение
Массив не чем не кончается. Это char кончается нулевым байтом, но можно прочитать и следующие, зная его номер. Пример:
Массив 0x11 0x77 0xff 0x00 0x2f 0x90
sizeof выдаст при этом 2. Но можно прочитать 0x90 с помощью [6] или 0x2f [5]
Типичный пример того, как функция sizeof откидывает "мусор".
Так и любые другие функции при чтении массива ищут нуль-символ.
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
26.01.2012, 14:11 #15
zelim,
Цитата Сообщение от zelim Посмотреть сообщение
А \ - спец. символ по-моему.
Да, это спец. символ.
Тем самым мы даем знать, что это не очередной символ, а уже конец файла.
речь про 0 вообще не шла. Шла речь об '\'
Я Вам привел пример, что Вы в корне не правы...
Цитата Сообщение от zelim Посмотреть сообщение
При чтении строки такого вида "123\0567" мы получим 123 - "остальное", т.е. то, что за '\0', считается мусором.
А если так? http://liveworkspace.org/code/d8d25da8884638f0b20b370dc7cc52dc
Цитата Сообщение от zelim Посмотреть сообщение
Типичный пример того, как функция sizeof откидывает "мусор".
Этот оператор возвращает размер выделенной памяти памяти... Почитали бы лучше что-нибудь.
0
26.01.2012, 14:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.01.2012, 14:11
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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