Почему 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"; не компилируется - защита от дурака.