У меня есть вопрос для лучшего understing, как массивы и nullbytes работают в С.C массивы и нулевой байт
Допустим, у меня есть целочисленный массив из 13 ячеек. Предположим, я хочу, чтобы номера ячеек: 1, 2, 3 и 10 имели значение. Остальные, оставшиеся по умолчанию, автоматически получают значение nullchar \ 0 как значение?
Мое понимание \ 0 состояло в том, что нулевой байт всегда находится в конце массива, и его функция заключается в том, чтобы сообщить программе, где заканчивается массив. Но, кажется, неправильно
Я написал простую прогу для проверки того, что и кажется, что это так:
int nums[13] = {1,2,3};
nums[10] = 69;
int i;
for(i=0;i<13;i++) {
if(nums[i]=='\0') {
printf("null char found! in position: %d\n",i);
}
else {
printf("element: %d found in position: %d of int array\n",nums[i],i);
}
}
return 0;
здесь выход:
элемент: 1 находится в положении: 0 ИНТ массив
элемент: 2 найдено в позиции: 1 из массива Int
элемент: 3 находится в положении: 2 Int массива
null char найден! в положении: 3
null char найденный! в положении: 4
null char найденный! в положении: 5
null null найденный! в позиции: 6
null char найденный! в положении: 7
null char найден! в положении: 8
null char найденный! в положении: 9
элемент: 69 находится в положении: 10 ИНТ массива
нулевой символ найден! в положении: 11
null char найденный! в положении: 12
| 1 | | 2 | | 3 | | \ 0 | | \ 0 | | \ 0 | | \ 0 | | \ 0 | | \ 0 | | 69 | | \ 0 | | \ 0 | | \ 0 |
Итак, почему ячейки по умолчанию заданы с помощью значения \ 0? вместо того, чтобы быть пустым, например?
Должен ли нулевой символ быть только один раз в конце всего массива? Благодаря
Статически выделенная память заполняется 0 для скаляров или NULL (\ 0) для указателей. Если вы нажмете \ 0 в качестве скаляра, он будет преобразован в 0. Нет такой вещи, как «пустой». Вы не должны сравнивать NULL (\ 0) с int в любом случае, используйте литерал 0. – Tibrogargan
«Мое понимание \ 0 состояло в том, что нулевой байт всегда находится в конце массива ..» совершенно неверно. Вы путаете регулярные массивы и строки C. – usr2564301
@Tibrogargan '\ 0' (символ NUL) не совпадает с указателем' NULL'. '\ 0' - это байт со всеми битами, установленными в 0, которые всегда будут сравниваться с' int' 0. – Kninnug