题目是密码破译
用原来字母后面的第四个字母代替原来的字母
例如:输入China后要输出Glmre
输入字符串后按下回车键就跳转了页面开始报错
报错信息为:
0x00007FF80BDE6191 (ucrtbased.dll) (练习题1.exe 中)处有未经处理的异常: 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突。
本来应该先判断是否超出a~Z范围 但是我还不知道这个代码为什么出错,麻烦各位帮我看看谢谢
这是源代码:
#include<stdio.h>
main()
{
char c1='\0', c2 = '\0', c3 = '\0', c4 = '\0', c5 = '\0';
char c6, c7, c8, c9, c0;
scanf_s("%c%c%c%c%c%c", &c1, &c2, &c3, &c4, &c5);
c6 = c1 + 4;
c7 = c2 + 4;
c8 = c3 + 4;
c9 = c4 + 4;
c0 = c5 + 4;
printf("%c%c%c%c%c", c6, c7, c8, c9, c0);
}
感谢各位
scanf_s("%c%c%c%c%c%c", &c1, &c2, &c3, &c4, &c5);
->
scanf_s("%c%c%c%c%c%c", &c1,1, &c2,1, &c3,1, &c4,1, &c5,1);
scanf_s要指定数据长度,改成scanf
scanf_s("%c%c%c%c%c%c", &c1, &c2, &c3, &c4, &c5); 读取了6个字符,但后面只用了5个字符变量的地址,将其改为scanf_s("%c%c%c%c%c", &c1,1, &c2, 1,&c3,1, &c4,1, &c5,1)试试。
下面代码在Dev-C++ 5.11中测试,将scanf_s()改为了scanf()。
测试代码如下:
参考链接:
#include<stdio.h>
int main() {
char c1='\0', c2 = '\0', c3 = '\0', c4 = '\0', c5 = '\0';
char c6, c7, c8, c9, c0;
// https://c.dovov.com/2722/%E4%BD%BF%E7%94%A8scanf_s%E8%AF%BB%E5%8F%96%E5%AD%97%E7%AC%A6.html
//https://www.coder.work/article/992115
// scanf_s("%c%c%c%c%c", &c1,1, &c2, 1,&c3,1, &c4,1, &c5,1);
scanf("%c%c%c%c%c", &c1, &c2, &c3, &c4, &c5);
c6 = c1 + 4;
c7 = c2 + 4;
c8 = c3 + 4;
c9 = c4 + 4;
c0 = c5 + 4;
printf("%c%c%c%c%c", c6, c7, c8, c9, c0);
}