Консультация # 190125: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Данный алгоритм реализует шифр плейфера, но у меня возникли две проблемы: 1) при дешифровке программа приписывает рандомный символ в конце( я думаю что моя реализация шифрования шифрует нулевой символ массива введённого текста) 2) если я реализую ввод текста через scanf...
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Данный алгоритм реализует шифр плейфера, но у меня возникли две проблемы: 1) при дешифровке программа приписывает рандомный символ в конце( я думаю что моя реализация шифрования шифрует нулевой символ массива введённого текста) 2) если я реализую ввод текста через scanf("%s",&MyText); тогда компилятор выдаёт мне ошибку "rror C4996: 'scanf': This function or variable may be unsafe. Consider using
scanf_s instead" как я понял,что просит установить scanf_s,но если я его установлю то при выборе пункта "Ввод текста" в меню программы он просто его пропускает,а также хотелось бы вводить строку чтобы кодировалась строка но также реализуя ввод через cin.getline(MyText.255) он так же просто пропускает Ввод текста.
Здравствуйте, dteplyakova80! Подправил код. Сравните. Замечания: 1) По шифру Плейфера требуется вставлять между двумя одинаковыми символами, как и в конце для дополнения до четного числа символов, какой-то другой. Я взял 'X'. После дешифровки данный символ (смотреть по смыслу) удалять 2) Для создания решетки надо использовать принятые правила. (Английских букв 26*2 = 52, а надо 25*2 = 50). Принято выкидать или буквы J,j или Q,q. Я заменяю J,j на I,i У Вас же было,
что буковки y,z - пропали. Что будет, если они будут в строке? (заменятся на A, как не найденные) 3) В конце был мусор, потому что надо строку завершать нулем. 4) Строки оригинально задавали. char MyText[] = ""; Здесь задается указатель на пустую строку. Запись в строку по указателю большему 0 неминуемо приведет к затиранию чего-то другого! 5) Строковые операции с суффиксом _s требуют указания длины приемного буфера, как раз, для предотвращения
переполнения буфера!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались.
Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора -
для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение.
Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал,
который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом.
Заходите - у нас интересно!