Я не могу понять, как распределяется память в следующем коде:
#include<stdio.h>
#include<string.h>
int main()
{
char a[]={"text"};
char b[]={'t','e','x','t'};
printf(":%s: sizeof(a)=%d, strlen(a)=%d\n",a, sizeof(a), strlen(a));
printf(":%s: sizeof(b)=%d, strlen(b)=%d\n",b, sizeof(b), strlen(b));
return 0;
}
Вывод
:text: sizeof(a)=5, strlen(a)=4
:texttext: sizeof(b)=4, strlen(b)=8
. Изучив адреса памяти и код вывода, кажется, что переменная b помещается перед переменной a, и поэтому strlen (b), ища \ 0, возвращает 8. Почему так происходит? Я ожидал, что сначала будет объявлена переменная a.