Почему я получаю сообщение об ошибке при выполнении моей программы шифрования Caesar? - PullRequest
0 голосов
/ 25 апреля 2019

Я работаю над программой шифрования Цезаря.В настоящее время я пытаюсь зашифровать сообщение.Я пишу функцию для выполнения этой задачи.Компилятор выполняет код без каких-либо ошибок, но окончательный вывод кода, который он должен отображать зашифрованное сообщение, он производит, Зашифрованное сообщение:

����

Почему это может быть так??Мой ошибочный код ниже.Любая форма помощи будет принята с благодарностью.Заранее спасибо.

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

1 Ответ

4 голосов
/ 25 апреля 2019

Код даже не должен компилироваться. (Несоответствие типов между 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...