Код даже не должен компилироваться. (Несоответствие типов между char(*)(char*, int)
и char
.)
return (encrypt_rot);
возвращает адрес функции encrypt_rot
. Может быть, вы хотели написать return a;
. Но тогда вы должны знать, что вы не должны возвращать адрес локальной переменной (в данном случае a
) из функции, потому что переменная исчезает, как только функция возвращается к своему вызывающему, и возвращаемый указатель больше не действителен. Также тип возвращаемого значения encrypt_rot
, равный char
, не соответствует типу a
, равному char[100]
, или, в данном случае, return a;
, это char *
.
Я бы посоветовал вам изменить параметр x
на месте:
void encrypt_rot(char x[100], int y)
{
for (size_t i = 0; i < 100 && x[i] != '\0'; ++i)
{
x[i] += y;
if (x[i] > 'z')
x[i] -= 26;
}
}
Кстати, вы должны подумать о лучших именах для ваших переменных.
scanf(" %[^\n]s", message);
Никогда, никогда, никогда не используйте спецификатор формата %s
, не указав SIZE для предотвращения переполнения буфера:
scanf(" %99[^\n]", message);