密码破译问题中字符输入输出问题

题目是密码破译
用原来字母后面的第四个字母代替原来的字母
例如:输入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()。

测试代码如下:

参考链接:


使用scanf_s读取字符 C语言编程开发 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


#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);
}

img