我在练习C语言密码确认任时候碰到问题。弹出异常,但继续运行没问题。

我在练习C语言密码确认任时候碰到问题


#define _CRT_SECURE_NO_WARNINGS  1
#include <stdio.h>
#include <string.h>


int main() {

    char password1[] = { 0 };
    char password2[] = { 0 };

    printf("请输入:>");
    scanf("%s", password1);

    int i = 0;

    for (i = 0; i < 3; i++) {

        printf("请确认密码:>");
        scanf("%s", password2);

        if (strcmp(password1, password2) == 0) {

            printf("成功\n");
            break;
        }
        else
        {
            printf("失败\n");
        }
    }

    if (3 == i) {
        printf("三次失败,退出程序");


    }

    return 0;
}

img


我尝试继续运行,然后就好了

img

怎么样才能让他不报错

char password1[] = { 0 };
这么定义的话,数组只有一个元素啊。你指定一下数组的大小吧

 
#define _CRT_SECURE_NO_WARNINGS  1
#include <stdio.h>
#include <string.h>
 
 
int main() {
 
    char password1[50] = { 0 };
    char password2[50] = { 0 };
 
    printf("请输入:>");
    scanf("%s", password1);
 
    int i = 0;
 
    for (i = 0; i < 3; i++) {
 
        printf("请确认密码:>");
        scanf("%s", password2);
 
        if (strcmp(password1, password2) == 0) {
 
            printf("成功\n");
            break;
        }
        else
        {
            printf("失败\n");
        }
    }
 
    if (3 == i) {
        printf("三次失败,退出程序");
 
 
    }
 
    return 0;
}

数组没有分配大小,内存会乱~:

img

楼上两位说的很对,你只定义了一个大小的数组,却写入了超过这个数量的字符串,其实已经是数组越界了。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632