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

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

Войти
Регистрация
Восстановить пароль
 
Jimmy
0 / 0 / 0
Регистрация: 11.09.2012
Сообщений: 11
#1

Почему размер символьного массива должен быть больше на 1 символ, а не на 2? - C++

17.09.2012, 05:19. Просмотров 624. Ответов 2
Метки нет (Все метки)

Привет! Пока читал учебник Шилдта, возник вопрос:
Объявляя символьный массив, который будет содержать строку с завершающимся нулем, вы должны задать ему длину на один символ больше, чем у самой длинной помещаемой в него строки. Если например, вы хотите объявить массив str, в котором будет находиться 10-символьная строка, то вы должны написать следующее:
C++
1
char str[11];
Почему Герберт Шилдт говорит, что следует задать длину на один символ больше, хотя как я понимаю, получается на два, если считать с нулевого индекса. Тогда где находится завершающийся нуль? В str[10] или str[11]?

И второй вопрос:
Чем завершается массив целых чисел?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.09.2012, 05:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему размер символьного массива должен быть больше на 1 символ, а не на 2? (C++):

размер массива должен быть указан в новых выражениях - C++
static classA **mas; mas = new classA*; static int l = 0; ifstream f("gs.txt"); if (f) { while (!f.eof()) { f >> p >> name; ...

Размер символьного массива - C++
Всех приветствую! Прошу простить, что тревожу столь банальными вопросами, но сам додумать не могу... Задан массив: char *a =...

Удалить символ из символьного массива - C++
Дана строка, если она является палиндромом, то вывести запись. Если не палиндром, то дополнить эту строку ее "зеркальным отражением", но...

Как скопировать символ из символьного массива в другой массив - C++
Есть массив s и r в обоих по 8 символов + \0 (окончание строки). В s есть символ "т", как его скопировать, например, в r? Проблема в...

Цикл: каждый символ символьного массива вывести на новой строке консоли - C++
Доброго всем здравия, споткнулся на ровном месте, цикл do while отказывается делать, то что я хочу char S = "gcfhgcf hdhgf 4754...

Создать динамический массив (Если чётных чисел больше, то массив должен быть укорочен на 2 элемента) - C++
Создать динамический массив из 8 случайных целых чисел из отрезка и вывести его на экран . Если в массиве чётных чисел оказалось...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
17.09.2012, 06:09 #2
Цитата Сообщение от Jimmy Посмотреть сообщение
Чем завершается массив целых чисел?
Ничем.
Цитата Сообщение от Jimmy Посмотреть сообщение
Почему Герберт Шилдт говорит, что следует задать длину на один символ больше, хотя как я понимаю, получается на два, если считать с нулевого индекса.
Когда объявляется массив, то число в скобках - количество элементов массива, а не максимальный индекс, т.е. : char str[11]; - это массив на 11 символов (10 - символов строки + '\0'). Максимальный индекс такого массива равен 10, где и находится '\0' . Символы самой строки располагаются с str[0] по str[9] включительно. str[11] - это уже выход за границу массива.
Jimmy
0 / 0 / 0
Регистрация: 11.09.2012
Сообщений: 11
17.09.2012, 06:25  [ТС] #3
Спасибо! Я забыл, что число в скобках это количество элементов массива, исчисляемое не от 0, а от 1.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.09.2012, 06:25
Привет! Вот еще темы с ответами:

Описать абстрактный класс породить от него еще два,один должен остаться абстрактным,другой должен быть способен пораждать объекты - C++
Знает кто как сделать?

Почему в setnamedisc нужно использовать char * для установки значения, а при возвращении значения тип метода должен быть char* ? - C++
Вопрос такой, почему в методе setnamedisc нужно использовать char *s для установки значения, а при возвращении значения в методе...

Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции - C#
Подскажите, в чем ошибка? Выдает ошибку: Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен...

Почему размер строки растра в bmp должен быть кратным четырем? - C (СИ)
Не знал где задать этот вопрос. Поскольку изучаю С, решил здесь. Добавлено через 49 минут 24-битный bmp


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

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

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