Почему slovo после фора умножается?

#include <stdio.h>
#include <string.h>

int main()
{int x, k=4;
char slovo1[5];
char slovo[5] = "pilip";
x = (int) strlen(slovo);
for (int i=0; i<x; i++){
    slovo1[i] = slovo[k];
    k--;
}
    if(strcmp(slovo, slovo1) == 0){
        printf("polin");
    }else
        printf("ne");
    return 0;
}

Slovo после for, пишет как pilippilip, в чём ошибка?


Ответы (1 шт):

Автор решения: HolyBlackCat

Неопределенное поведение начинается отсюда: x = (int) strlen(slovo);.

strlen ожидает на вход массив символов с хотя бы одним нулевым байтом внутри, а в вашем массиве его нет. Не влез.

char slovo[5] = "pilip"; эквивалентно char slovo[5] = {'p','i','l','i','p'};. Нулевого байта тут нет.

char slovo[] = "pilip"; эквивалентно char slovo[6] = "pilip"; и эквивалентно char slovo[6] = {'p','i','l','i','p','\0'};. В конце автоматически ставится нулевой байт.

strcmp тоже ожидает нулевые байты, поэтому в slovo1 его придется вставить самому.


Что интересно, в С++ char slovo[5] = "pilip"; не компилируется - защита от дурака.

→ Ссылка