В C ++, если я делаю:
char myArray[] = {'1','2','3','4','5','6','7','8','9'};
Это выделяет 10 пробелов? Последний элемент является ‘/ 0’?
Как насчет:
char myArray[9] = {'1','2','3','4','5','6','7','8','9'};
Я выделил только 9 пробелов в этом случае? Это плохо?
И, наконец, что происходит, когда я делаю:
char myArray[10] = {'1','2','3','4','5','6','7','8','9','/0'};
char myArray[] = {'1','2','3','4','5','6','7','8','9'};
Это выделяет 10 пробелов? Последний элемент является ‘/ 0’?
№ 9
char myArray[9] = {'1','2','3','4','5','6','7','8','9'};
Я выделил только 9 пробелов в этом случае?
Да.
Это плохо?
Нет.
и, наконец, что происходит, когда я делаю
char myArray[10] = {'1','2','3','4','5','6','7','8','9','/0'};
Предполагая, что вы имели в виду '\0'
именно так это выглядит.
В любом из этих случаев нет магии — вы получаете именно то, что просите.
Автоматическое нулевое завершение — это то, что входит в игру строковые литералы:
char myArray1[10] = "123456789";
char myArray2[9] = "123456789"; // won't compile - wrong size
char myArray3[] = "123456789"; // still 10 elements - includes null terminator
Нет, вы получите только трейлинг NUL
при использовании строкового литерала, т.е.
// Array of 10 bytes
char myArray[] = "123456789";
// same as:
char myArray[] = {'1','2','3','4','5','6','7','8','9','\0'};
char myArray[] = {'1','2','3','4','5','6','7','8','9'};
Это только выделяет 9 элементов.
char myArray[9] = {'1','2','3','4','5','6','7','8','9'};
Да, эта строка также выделяет 9 элементов.
char myArray[10] = {'1','2','3','4','5','6','7','8','9','/0'};
Последний должен быть '\0'
вместо '/0'
,
То, о чем вы думаете, должно быть
char myArray[] = "123456789";
который выделяет 10 символов (1 для трейлинга '\0'
в конце строкового литерала)
char
Массивы не ведут себя иначе, чем любые другие массивы, когда вы используете инициализацию списка. Вы ожидаете
int x[] = {1,2};
волшебным образом добавить 0
как последний элемент и сделать x
есть 3 элемента?
Если вы предоставляете меньше элементов, то последние инициализируются значением, поэтому
char myArray[10] = {'1','2','3','4','5','6','7','8','9'};
будет нулевым, но
char myArray[9] = {'1','2','3','4','5','6','7','8','9'};
нет.