выделение памяти для строки и массива char

Я не могу понять, как распределяется память в следующем коде:

#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.

5
задан Frexus 25 June 2011 в 21:37
поделиться