Почему массив не принимает нулевой терминатор? - PullRequest
0 голосов
/ 12 мая 2018

Я пытаюсь вставить нулевой терминатор в конце этого массива. Как бы это исправить?

int cool_array[10] = {0};
int i = 0;
while (i < 5) {
    cool_array[i] = 5;
    i++;
}

cool_array[i] = {'\0'} // this is where the problem is. I get an error.

Ошибка:

error: expected expression
legal_cards[legal_counter] = {'\0'};
                             ^
1 error generated.

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

Как указал @achai, мы обычно резервируем термин «нулевой терминатор» для использования в сочетании с char массивами, содержащими строковые данные.Тем не менее, нет ничего плохого в том, чтобы использовать значение 0 в качестве маркера конца данных в массивах других типов, но такое соглашение отнюдь не универсально.

Вы получаете ошибку, поскольку синтаксисвашего назначения терминатора неправильно.Вы присваиваете cool_array[i], который имеет тип int.Следовательно, правая часть присваивания должна быть выражением типа int.Это может быть '\0' или (100% эквивалент) просто 0, но фигурные скобки ({}) там не место.

cool_array[i] = 0;

Возможно, вы не понимаете похожий кодв объявлении из cool_array:

int cool_array[10] = {0};

Обратите внимание, что это объявление, а не исполняемый оператор, и внутри него нет присваивания.Он содержит инициализатор для массива, но, хотя он имеет схожую форму, синтаксис и семантика отличаются от назначения.В частности, он говорит инициализировать первый элемент массива (явно) 0 и неявно инициализировать все остальные элементы (0).

0 голосов
/ 12 мая 2018

Во-первых , нулевой терминатор в конце этого массива ( integer ) не имеет никакого смысла.если его char array, то он должен быть нулевым.

cool_array[i] = '\0'; не требуется, поскольку вы уже инициализировали cool_array изначально, как показано ниже

int cool_array[10] = {0}; /* here itself cool_array all elements initialized with zero */

Во-вторых , если cool_array является массивом символов, подобным char cool_array[10], тогда оно должно быть

cool_array[i] = '\0'; /*  make sure i value is within range i.e 0 to 9 as you declare cool_array[10]  */

вместо

cool_array[i] = {'\0'};
...