谁能解释一下为什么我的数组初始化!linux系统vi编辑器,a[9]越界,不报错也没警告。

谁能解释一下为什么我的数组初始化!linux系统vi编辑器,a[9]越界,不报错也没警告。,第1张

这个问题很好!首先明白 数组在栈中分配,到a[8] 已ok a[9]=o会把下一个地址的值改写为0.(栈溢出

c对数组越界不报错的,需要程序员自己检查,这也是一些人批评c的原因!这个问题有个更好的代码 手头没有 不过这个问题理解明白就好了 溢出也是被攻击的地方之一

运行起来就一直跑着(像死循环一样,结束不了main函数)解释这个 原本i到8就停止了!!!

但是a[9] =0恰巧改的位置就是I的值!!!所以i=0;for循环就结束不了,但是这有个前提,栈的方向是从高到低,不懂?这样理解吧.编译器帮你分好地方后是这样的:

a[0] .....a[8] a[9] (i) 其实a[9] 和i一个位置 你打印他们的地址看看 比较下 若栈从低到高 就不会了

函数名: remove

功   能: 删除一个文件

用   法: int remove(char *filename)

程序例:

#include <stdio.h>  

int main(void)  

{  

    char file[80]  

    /* prompt for file name to delete */  

    printf("File to delete: ")  

    gets(file)  

    /* delete the file */  

    if (remove(file) == 0)  

       printf("Removed %s.\n",file)  

    else  

       perror("remove")  

    return 0  

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7415967.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-05
下一篇 2023-04-05

发表评论

登录后才能评论

评论列表(0条)

保存