C++中对数组的输入越界问题

代码:

#include <cstdio>

int main(){
    char str[10];
    scanf("%s",str);
    printf("%s",str);
    return 0;

}

运行结果:
图片说明
提问:为什么10个单位的存储空间能存储这么多的字符?不会报错呢。。。

在c/c++ 中,不会对数组边界检查,也就是说编译器不会报错,它会把数据写入到未知的内存地址,这时候就会很危险,轻则数据错乱,重则系统或程序崩溃

给你看张图:

图片说明

很明显str2值被无端修改了,这就是数组越界修改别的变量值

不是10个单位能存储这么多字符,是scanf和printf函数机制导致的
scanf读一行输入字符串(含空格),存入str,多出来的字符会继续填入str之后的存储空间,但这部分空间不属于str
printf会输出直到遇到终止符为止,你的输入终止符超出str的存储空间了
图片说明
你可以试试,输入1234 56789,printf会打印1234,for循环逐个打印就是1234 56789

只要不是renturn 0都是程序出错了,程序只是没向IDE一样报错,因为内存溢出判断不是IDE的事,命令行也没那个能力像IDE一样标明出了什么错,只能通过返回值来表示。