что в действительности должен возвращать 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.)

Ответы на вопрос(4)

Ваш ответ на вопрос