使用ASCII的caesar密码返回C-cedilla

时间:2016-03-12 06:15:06

标签: c++ arrays encryption ascii caesar-cipher

所以我现在正在使用字母表的ASCII代码进行凯撒密码程序,其中原始文本将向右移动6个字符,但问题是当我输入字母z时,它返回Ç而不是返回字母F。到目前为止,这是我的代码:

merge

尝试编译并运行它,以便您更清楚地了解我的问题

2 个答案:

答案 0 :(得分:2)

您正遭受有符号整数溢出!

很多这是依赖于实现的/未定义的行为,但是把它放在一边我会解释发生了什么。

您的char类型已签名,其值为-128127'z'的值为122。当您添加6时,成为128 ...如果它能够表示该数字。但是,最大值为127,并且溢出。它环绕并成为-128

您可以在添加之前进行检查,以确保角色的值足够低,以便您可以安全地增加它以避免此问题。

具体来说,char是签名还是无符号取决于实现,signed char只需要保存从-127127的值,而签名溢出是未定义的行为

答案 1 :(得分:0)

你有一个溢出,使用无符号算术修复你的代码:

unsigned char wordArray[userin.length()];
strcpy((char *) wordArray, userin.c_str());