Daniro_San
@Daniro_San
Программист

Странность инициализации массива char?

MinGW
Мы можем инициализировать массив типа char вот так:
// 4 конечно же завершающий символ
char example[4];

// вместе "name" Пока что все ясно. 4 по прежнему завершающий символ.
example[0]='n'; example[1]='a'; example[2]='m'; example[3]='e';

// Почему я не могу сделать так???
char exampleTwo[4]="name"; // Не компилируется!

// Зато вот так прекрасно компилируется:
char exampleTwo[5]="name"; // Два завершающих символа???

Кто мне может объяснить в чем подвох?
  • Вопрос задан
  • 858 просмотров
Решения вопроса 2
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Обнаружен бардак в голове! В вашей, к сожалению.

char example[4]; - массив на 4 места. НА 4, КАРЛ!
Считаем (прописью) N (раз) A (два) M (три) E (четыре)

Все, место кончилось. Никакого завершающего символа на месте [4] нет, это ваше заблуждение.
Чтобы сохранить строку из четырех символов, нужен пятиместный массив. Что и потребовал компилятор.

Вывод - вам - доучиваться. А компилятор - молодец.
Ответ написан
Denormalization
@Denormalization
Итак:
char example[4]; - Создаем массив типа Char из 4х элементов.
В С\C++ индексация массивов начинается с нуля. Считаем внимательно 0, 1, 2, 3 = 4 элемента.

char exampleTwo[4]="name";
Тут интереснее:
- exampleTwo - массив типа char из 4х элементов.
- "name" - строка. Из 5(!) элементов. Из 5, так как строка в C\C++ - это какой-то набор байт, который заканчивается 0 (нулем).

char exampleTwo[5]="name";
Теперь все верно, мы в массив из 5 элементов заносим 5 элементов [n, a, m, e, 0]
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы