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