Was sollte strlen () in diesem Code wirklich zurückgeben?

#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;
}

Sehen Sie sich den obigen Code an. Das Arrayqq enthält vier Elemente und das Arrayqqq enthält fünf Elemente, von denen das letzte @ i'\0'. Also verstehe ich Zeile A druckt4 und Zeile C druckt5. Linie D ist in Ordnung mit mir. Ich verstehe dasstrlen(qqq) ist gleich"sizeof qqq / sizeof qqq[0] - 1" beim Umgang mit Strings. Aber Zeile B druckt15 was mich verwirrt. Warum? (Ich benutze vs2012.)

Antworten auf die Frage(8)

Ihre Antwort auf die Frage