sizeof
возвращает размер типа переменной в байтах. Так что в вашем случае он возвращает размер вашего char[7]
, который равен 7 * sizeof(char)
. Поскольку sizeof(char) = 1
, результат равен 7.
Расширяем это до другого примера:
int intArr[5];
printf("sizeof(intArr)=%u", sizeof(intArr));
даст 5 * sizeof(int)
, поэтому вы получите результат «20» (по крайней мере, на обычной 32-битной платформе. На других sizeof(int)
может отличаться)
Чтобы вернуться к вашей проблеме:
Похоже, что вы хотите знать, это длина строки, которая содержится
внутри вашего массива, а не общий размер массива.
По определению C-строки должны заканчиваться завершающим символом '\ 0' (0-байт).
Таким образом, чтобы получить соответствующую длину строки, содержащейся в вашем массиве, у вас есть
сначала завершить строку, чтобы вы могли сказать, когда она закончилась. Иначе теперь был бы способ узнать.
Все стандартные функции основаны на этом определении, поэтому, если вы вызываете strlen
, чтобы получить
str ing len gth, он будет перебирать указанный массив, пока не найдет первый 0-байт, который в вашем случае будет самым первым элементом.
Еще одна вещь, которая может вам понадобиться знать, что только потому, что вы не заполняете оставшиеся элементы вашего char[7]
значением, они действительно содержат случайные неопределенные значения.
Надеюсь, это помогло.