FayeValentine77 2022-02-24 23:02 采纳率: 100%
浏览 32
已结题

请问为啥会这样?数组不是自带地址吗

问题遇到的现象和发生背景

运行的时候,输入了“123456”,结果没办法继续运行。

问题相关代码,请勿粘贴截图
#include<stdio.h>
#include<string.h>
int main()
{
    char password[20] = { 0 };
    printf("请输入密码:");
    scanf_s("%s", password);                   //由于数组自带地址,不需要&符号
    printf("请确认密码(Y/N):");
    int imp = 0;
    while ((imp = getchar()) != '\n') {
        ;
    }                                         //清空缓冲区
    int ch = getchar();
    if (ch == 'Y')
        printf("确认成功\n");
    else
        printf("确认失败\n");
    return 0;
}

运行结果及报错内容

在scanf那一行,报错 0x7C01E63C (ucrtbased.dll)处(位于 Project1.c.exe 中)引发的异常: 0xC0000005: 写入位置 0x00D00000 时发生访问冲突。

我的解答思路和尝试过的方法

不知道

我想要达到的结果

输入一个密码,然后再输入Y或N,输出“确认成功”或“确认失败”

  • 写回答

3条回答 默认 最新

  • 关注

    scanf_s函数password后面要加字符串长度。scanf_s函数为了确保字符串安全,要求参数指定字符串的最大长度,避免溢出
    改为:
    scanf_s("%s", password, 20);

    #include<stdio.h>
    #include<string.h>
    int main()
    {
        char password[20] = { 0 };
        printf("请输入密码:");
        scanf_s("%s", password,20);                   //由于数组自带地址,不需要&符号
        printf("请确认密码(Y/N):");
        int imp = 0;
        while ((imp = getchar()) != '\n') {
            ;
        }                                         //清空缓冲区
        int ch = getchar();
        if (ch == 'Y')
            printf("确认成功\n");
        else
            printf("确认失败\n");
        return 0;
    }
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月6日
  • 已采纳回答 2月26日
  • 创建了问题 2月24日