Длина полностью заполненного массива - PullRequest
0 голосов
/ 10 апреля 2020
#include <stdio.h>
#include <string.h>    
int main(void)    
{
    char cp [5];
    cp[0]=1;
    cp[1]=1;
    cp[2]=1;
    cp[3]=1;
    cp[4]=1;
    printf("%lu\n", strlen(cp));
}

Если я запускаю эту программу, она отображает 8. (неверно) Но если я изменю массив на более чем [5] (пример: [6] или [7] ...) с тем же номером элементов массива отображает 5 (справа).

Ответы [ 2 ]

0 голосов
/ 10 апреля 2020

Строки в C должны заканчиваться нулевым терминатором, чтобы такие функции, как strlen, правильно рассчитывали длину. Сделать последний символ \0.

0 голосов
/ 10 апреля 2020

strlen возвращает числовые символы из указателя, который вы даете, до нулевого символа (не считая), в вашем случае вы не помещаете нулевой символ в свой массив, поэтому strlen выходит из массива с неопределенным поведением

например do

char cp [6];
cp[0]=1;
cp[1]=1;
cp[2]=1;
cp[3]=1;
cp[4]=1;
cp[5] = 0;
printf("%zu\n", strlen(cp));

также обратите внимание, что я изменил формат, strlen возвращает size_t правильный формат для него: % zu


из-за того, что вы вставили в свой массив символы, имеющие код 1, этот символ, как правило, недоступен для записи, хотите ли вы '1 вместо 1?

...