o que strlen () realmente deve retornar nesse 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;
}
Veja o código acima. A matrizqq
tem quatro elementos nele e a matrizqqq
possui cinco elementos, o último dos quais é'\0'
. Então eu entendo as impressões da linha A4
e impressões da linha C5
. A linha D está bem comigo. Eu entendi aquilostrlen(qqq)
é igual a"sizeof qqq / sizeof qqq[0] - 1"
ao lidar com cordas. Mas a linha B imprime15
o que me deixa perplexo. Por quê? (Eu uso o vs2012.)