所以我现在正在使用字母表的ASCII代码进行凯撒密码程序,其中原始文本将向右移动6个字符,但问题是当我输入字母z时,它返回Ç而不是返回字母F。到目前为止,这是我的代码:
merge
尝试编译并运行它,以便您更清楚地了解我的问题
答案 0 :(得分:2)
您正遭受有符号整数溢出!
很多这是依赖于实现的/未定义的行为,但是把它放在一边我会解释发生了什么。
您的char
类型已签名,其值为-128
至127
。 'z'
的值为122
。当您添加6
时,将成为128
...如果它能够表示该数字。但是,最大值为127
,并且溢出。它环绕并成为-128
。
您可以在添加之前进行检查,以确保角色的值足够低,以便您可以安全地增加它以避免此问题。
具体来说,char
是签名还是无符号取决于实现,signed char
只需要保存从-127
到127
的值,而签名溢出是未定义的行为
答案 1 :(得分:0)
你有一个溢出,使用无符号算术修复你的代码:
unsigned char wordArray[userin.length()];
strcpy((char *) wordArray, userin.c_str());