Распределение массива символов

В 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'};

1

Решение

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
9

Другие решения

Нет, вы получите только трейлинг NUL при использовании строкового литерала, т.е.

// Array of 10 bytes
char myArray[] = "123456789";

// same as:
char myArray[] = {'1','2','3','4','5','6','7','8','9','\0'};
3

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' в конце строкового литерала)

1

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'};

нет.

1
По вопросам рекламы [email protected]