C语言会在数组存储结束之后自动阻止继续写入数据么?能不能写一个程序存储数组结束之后输入的数据?
答案:4 悬赏:50 手机版
解决时间 2021-02-26 08:05
- 提问者网友:留有余香
- 2021-02-25 22:27
C语言会在数组存储结束之后自动阻止继续写入数据么?能不能写一个程序存储数组结束之后输入的数据?
最佳答案
- 五星知识达人网友:迷人又混蛋
- 2021-02-25 23:01
这两个英文问题问的是:
1.当数组越界时,C语言是否会自动保护
2.C语言能否越出数组的界限写入数据
答案: 1.不会 2.是可以的(用指针 指针可以做出很多比如溢出漏洞什么涉及越界) 但是容易造成系统崩溃 因为你不知道后面的数据是不是很重要的 要是别的程序要用的你修改了 会产生想不到的效果
1.当数组越界时,C语言是否会自动保护
2.C语言能否越出数组的界限写入数据
答案: 1.不会 2.是可以的(用指针 指针可以做出很多比如溢出漏洞什么涉及越界) 但是容易造成系统崩溃 因为你不知道后面的数据是不是很重要的 要是别的程序要用的你修改了 会产生想不到的效果
全部回答
- 1楼网友:蕴藏春秋
- 2021-02-26 02:35
你可知道char b[][100]={0};这是什么意思吗?当你不指定第二维的长度,初始化时又没明确指出其长度,那么编译器就会把上式变为:char b[1][100]={0};结果你只开辟了1组100个char的数组,你还以为能有10组,当然错误啦。如果明确包含10个字符串,请明确指定:char b[10][100]={0};
你这个弹错,意思就是你开辟的内存空间不够,导致strcpy函数运行时缓冲区溢出,这使得程序跳转到一个非法的区域,这个区域被操作系统标记为保护,于是触发“cpu常规保护异常”。
以下仅作谈资,骗分数用的^ ^。
我印象中,如果是“cpu常规保护异常”,可能意味着你这跳转到的地方是操作系统内核区。当cpu以用户权限等级(最低权限等级,你这个main函数执行时,printf函数执行前或执行后是就是这种状态)尝试跳转到/访问需要cpu最高特权等级的区域就会触发这类错误。
- 2楼网友:骨子里都是戏
- 2021-02-26 02:04
不能。C是不检查数组大小。如果越界了,C也是不会
帮你检测的。
这是C程序员应当担负的责任了。。。
- 3楼网友:迷人又混蛋
- 2021-02-26 00:31
是不是数组越界的问题,好比数组长度定义了7,但是你要输出第8个,这是可以的,程序编译不会阻止。其次你要输出的话直接打印比如 a[7] 打印a[8]就行了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯