C инициализация массива - PullRequest
       3

C инициализация массива

4 голосов
/ 17 декабря 2010

Мне было любопытно, как C обрабатывает инициализацию массива.У меня есть следующий код в моей программе:

UChar match[] = {0xdf, 'a', 'b', '\0'};

По сути, это инициализация строки UTF-16.В этом случае UChar равен 16 битам.

Мой вопрос: мне нужен завершающий байт NULL в конце строки, но необходимо включить его в инициализацию, или C автоматически включит его для ALLинициализации массива?

Ответы [ 3 ]

11 голосов
/ 17 декабря 2010

Да, вам нужно добавить завершающий '\ 0' (кстати, не NULL) - C делает это только для строковых литералов , но не для любого массива.

Например -

char* str = "12345";

Будет массивом из 6 символов, шестым из которых является \ 0.

То же самое для -

char str[] = "12345";

В нем будет 6 предметов.

НО -

char str[] = { '1', '2', '3', '4', '5' };

Будет иметь ровно 5 элементов без завершающего '\ 0'.

(при инициализации в вопросе у вас уже есть '\ 0', поэтому вам больше ничего не нужно).

1 голос
/ 17 декабря 2010

Если вы когда-нибудь захотите манипулировать массивом символов в виде строки, вам понадобится завершающий символ.

0 голосов
/ 20 августа 2011

Вы можете сделать это, если не хотите явно указывать \0 для строки Предположим, вы знаете, что ваша строка содержит 5 букв, а затем создайте массив, подобный этому

char str[6]={'h','e','l','l','o'};

Я хочу сказать, что даже если вы наполовину инициализируете массив, остальные значения дополняются 0s. Так например

int arr[5]={1,2,3};

сейчас, если вы делаете

printf("%d",a[3]);    or     printf("%d",a[4]);

оба будут 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...