一道课后习题,报错显示数组越界,想请大佬看看问题具体出在哪?

//可见字符的ASCII码范围是32~126
#include <stdio.h>
#include <string.h>

int main()
{
    char str1[512], str2[512];//str1是输入的字符串,str2用于存放不同种类的字符
    char ch;//ch是出现次数最多的那个字符
    int count = 0, type = 0, max = 0;//count是单个字符出现的次数,type是不同字符的种类数,max是出现次数最多的那个字符的数量
    int i, a, n = 0;//其他

    printf("请输入英语文本:");
    scanf("%[^\n]", &str1);

    for (i = 32; i <= 126; i++)//按照ASCII码表逐个判断
    {
        for (a = 0; a < strlen(str1); a++)
        {
            if (str1[a] == (char)i)
            {
                count++;
            }
        }
        if (count != 0)
        {
            type++;
            str2[n] = (char)i;
            n++;
            if (count >= max)
            {
                max = count;
                ch = (char)i;
            }
        }
        count = 0;
    }
    str2[strlen(str2)] = '\0';

    printf("你总共输入了%u个字符,其中不同的字符个数有%d个\n", strlen(str1), type);
    printf("它们是:%s\n", str2);
    printf("出现次数最多的字符是'%c',它总共出现了%d次\n", ch, max);

    return 0;
}

 

你定义了512长度,但是你打印下strlen,长度确实超过了512.

 

你输入的字符个数超过512了吧