У меня есть простая программа, например:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
int numberOfDays;
char name[10];
} Month;
int main(void)
{
const Month months[12] = {
{ 31, {'J', 'a', 'n'} },
{ 28, {'F', 'e', 'b'} }
};
printf("%zu\n", strlen(months[0].name));
printf("%zu\n", sizeof(months[0].name));
printf("%zu\n", strlen(months[1].name));
printf("%zu\n", sizeof(months[1].name));
return 0;
}
Вывод выглядит следующим образом:
3
10
3
10
Я понимаю, почему sizeof(months[i].name)
печатает 10, но почему strlen
возвращает правильное значение в этом случае?
Моя мысль заключалась в том, что strlen
подсчитывается до первого '\0'
, но массив char name[3]
не завершен нулем. Насколько я понимаю, это должно быть поведение undefined? Это работает только случайно?
Мне интересно, как выглядит макет памяти в вышеприведенном массиве months[12]
.