что в действительности должен возвращать strlen () в этом коде?
#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;
}
Посмотрите на код выше. Массивqq
имеет четыре элемента в нем и массивqqq
имеет пять элементов, последний из которых'\0'
, Итак, я понимаю, что линия А печатает4
и линия C печатает5
, Линия D в порядке со мной. Я это понимаюstrlen(qqq)
равняется"sizeof qqq / sizeof qqq[0] - 1"
при работе со строками. Но Линия B печатает15
что делает меня озадаченным Зачем? (Я использую vs2012.)