¿Qué debería realmente devolver strlen () en este código?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
    char qq[] = {'a' , 'b' , 'c' , 'd'};
    char qqq[] = "abcd";
    printf("%d\n" , sizeof qq / sizeof qq[0]); // line A
    printf("%d\n" , strlen(qq)); // line B
    printf("%d\n" , sizeof qqq / sizeof qqq[0]); // line C
    printf("%d\n" , strlen(qqq)); // line D

    system("pause");
    return 0;
}

Mira el código de arriba. La matrizqq tiene cuatro elementos y la matrizqqq tiene cinco elementos, el último de los cuales es'\0'. Entonces entiendo las impresiones de la línea A4 y la línea C imprime5. La línea D está bien conmigo. Entiendo questrlen(qqq) es igual"sizeof qqq / sizeof qqq[0] - 1" cuando se trata de cuerdas. Pero la línea B imprime15 lo que me deja perplejo ¿Por qué? (Yo uso vs2012.)

Respuestas a la pregunta(4)

Su respuesta a la pregunta