精华内容
下载资源
问答
  • C语言 数组下标越界 - C语言零基础入门教程
    2021-08-19 09:36:40

    目录

    零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门

    一.数组下标越界简介

    1、什么是数组访问越界?

    C 语言中,我们可以直接通过数组下标来访问数组中的元素;

    如果一个数组定义为有n个元素,那么,对这n个元素(下标为0n-1的元素)的访问都合法,如果对这n个元素之外的访问,就是非法的,称为**越界**,例如:

    int a[5] = {0}; //等价 int a[5] = {0,0,0,0,0};
    a[0] = 1;  // ok
    a[1] = 2;  // ok
    a[2] = 3;  // ok
    a[3] = 4;  // ok
    a[4] = 5;  // ok
    a[5] = 6;  // 数组下标越界
    

    在上面代码中,声明一个数组a[5],该数组中只能存放5个元素,下标索引值取值范围0~4,超过这个范围就属于下标越界;

    2、访问越界会出现什么结果?

    首先,它并不会 造成编译错误!就是说,C,C++ 的编译器并不判断和指出你的代码访问越界了。一个明明是错误的东西,就这样“顺利”地通过了编译;

    数组访问越界在运行时,它的表现是不定的,有时似乎什么事也没有,程序一直运行(当然,某些错误结果已造成);有时,则是程序一下子崩溃。因此在使用数组时,一定要在编程中判断是否越界以保证程序的正确性。

    二.数组下标越界案例

    /******************************************************************************************/
    //@Author:猿说编程
    //@Blog(个人博客地址): www.codersrc.com
    //@File:C语言教程 - C语言 数组下标越界
    //@Time:2021/06/10 08:00
    //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
    /******************************************************************************************/
    
    
    #include <stdio.h>
    int main()
    {
        int i, a[10];
        for(i = 1; i <= 10; ++i)
            a[i] = 0;
        return 0;
    }
    

    数组中的下标从 0 开始,那么在上面代码中只能访问:a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9];i自加到10时,a[10]属于数组下标越界。

    三.防止数组下标越界方法

    如果数组的长度和下标访问值弄错,都会造成数组下标越界;数组的下标是从 0 开始的,最大的访问值是数组的长度-1;

    //如果是整形数组
    int len = sizeof(array)/sizeof(int);
    //如果是字符数组
    int len = sizeof(array)/sizeof(char);
    //如果是浮点数数组
    int len = sizeof(array)/sizeof(double);
    //如果是浮点数数组
    int len = sizeof(array)/sizeof(float);
    for(int i = 0;i < len ; i++)
    {
        //.....
    }
    

    四.猜你喜欢

    1. 安装 Visual Studio
    2. 安装 Visual Studio 插件 Visual Assist
    3. Visual Studio 2008 卸载
    4. Visual Studio 2003/2015 卸载
    5. C 语言格式控制符/占位符
    6. C 语言逻辑运算符
    7. C 语言三目运算符
    8. C 语言逗号表达式
    9. C 语言 sizeof 和 strlen 函数区别
    10. C 语言 strcpy 和 strcpy_s 函数区别
    11. C 语言 memcpy 和 memcpy_s 区别
    12. C 语言 数组定义和使用
    13. C 语言 数组遍历
    14. C 语言 数组排序 – 冒泡法排序
    15. C 语言 数组排序 – 选择法排序
    16. C 语言 数组排序 – 插入法排序
    17. C 语言 数组排序 – 快速法排序
    18. C 语言 数组下标越界

    未经允许不得转载:猿说编程 » C 语言 数组下标越界

    更多相关内容
  • 数组下标越界

    2021-05-21 04:44:51
    已结贴√问题点数:20回复次数:11 数组下标越界题目是一个有10个元素的数组,存有10个考生的分数,写5个函数,分别计算总分,最高分,最低分,平均分,分数升序排列。我写了5函数,问题出在最高分和最低分函数上。...

    已结贴√

    问题点数:20 回复次数:11

    ca56232b3bbedf9a539d07f37fffb99a.gif

    3144d8b7615c79d9f638db40d5689d26.gif

    a218af6549b45ee526caf607ebff1358.gif

    0f8df0e29816ae721419de940fb833d1.gif

    数组下标越界

    题目是一个有10个元素的数组,存有10个考生的分数,写5个函数,分别计算总分,最高分,最低分,平均分,分数升序排列。

    我写了5函数,问题出在最高分和最低分函数上。我用了两种方法,第一种是最高分和最低分都用冒泡法分别排序,分别运行的时候没有问题,

    但和其他3函数一起运行时候就打印最小值不是63了,而且一个很大的数,我想是一个垃圾值(下标越界造成的);但是我重新建个项目,只把

    max函数和min函数两个函数放进去和main函数一起运行就没有出错。不明白问题出在哪里了。请教下各位帮我看下:我认为是下标越界造成的,

    中间出个一次问题:最小值对了63,最大值就不对了。把最大值改对了,最小值就不对了。

    下面附上具体的代码,求教:看计算max和min方法1就可以了。方法2是调用降序排列后输出的没有问题。

    #include

    #include

    #define N 10

    //求总分

    int sum(int arr[])

    {

    int n=0;    //局部变量,所以每个函数都可以声明n

    int sum1=0;

    for(;n<10;n++)

    {

    sum1+=arr[n];

    }

    return sum1;

    }

    //求最高分方法1

    int max(int arr[])

    {

    int n=0;

    int temp=0;

    int max1=0;

    for(n=0;n<9;n++)

    {

    if(arr[n]>arr[n+1])

    {

    temp=arr[n];

    arr[n]=arr[n+1];

    arr[n+1]=temp;

    }

    }

    max1=arr[9];

    return max1;

    }

    //求最低分1             注意数组下标越界

    int min(int arr[])

    {

    int n=0;

    int temp=0;

    int min1=0;

    for(n=9;n>=0;n--)

    {

    if(arr[n-1]>arr[n])

    {

    temp=arr[n-1];

    arr[n-1]=arr[n];

    arr[n]=temp;

    }

    }

    min1=arr[0];        //此时循环后最小值在最上方;

    return min1;

    }

    /*

    //求最高分方法2

    int max(int arr[])

    {

    int max1=0;

    int LtoH(int arr[]);  //排序函数LtoH在max后面,所以先声明排序函数

    LtoH(arr);              //声明之后才能调用

    max1=arr[9];

    return max1;

    }

    //求最低分方法2

    int min(int arr[])

    {

    int min1=0;

    int LtoH(int arr[]);

    LtoH(arr);

    min1=arr[0];

    return min1;

    }

    */

    //求平均分,调用求总分函数sum()

    float avg(int sum)

    {

    float avg1;

    avg1=(float)sum/10;

    return avg1;

    }

    //成绩升序排序,从低分到高分

    int LtoH(int arr[])

    {

    int n=0,m=0,temp=0;

    for(n=9;n>0;n--)

    {

    for(m=0;m

    {

    if(arr[m]>arr[m+1])

    {

    temp=arr[m];

    arr[m]=arr[m+1];

    arr[m+1]=temp;

    }

    }

    }

    }

    int main()

    {

    int score[N]={67,98,75,63,82,79,81,91,66,84};

    int sum2=0,max2=0,min2=0;

    float avg2;

    int n=0;

    sum2=sum(score);

    printf("总分:%d\n",sum2);

    max2=max(score);

    printf("最高分:%d\n",max2);

    min2=min(score);

    printf("最低分:%d\n",min2);

    avg2=avg(sum2);

    printf("平均分:%.1f\n",avg2);

    LtoH(score);

    printf("成绩降序排列:");

    for(n=0;n<10;n++)

    printf("%d ",score[n]);

    printf("\n");

    system("pause");

    return 0;

    }

    [此贴子已经被作者于2016-3-10 14:12编辑过]

    搜索更多相关主题的帖子:

    而且 项目 元素

    展开全文
  • 数组下标越界,该怎么解决

    千次阅读 2021-04-14 03:16:42
    数组下标越界packageimport_csv;importjava.io.BufferedReader;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.Un....

    数组下标越界

    package import_csv;

    import java.io.BufferedReader;

    import java.io.FileInputStream;

    import java.io.FileNotFoundException;

    import java.io.IOException;

    import java.io.InputStreamReader;

    import java.io.UnsupportedEncodingException;

    import java.sql.Connection;

    import java.sql.DriverManager;

    import java.sql.SQLException;

    import java.sql.Statement;

    public class csv_sqlite {

    public static void main(String[] args) throws ClassNotFoundException, IOException  {

    String b[] = { "2012060101", "2012060201", "2012060202", "2012060203",

    "2012060204", "2012060205", "2012060206", "2012060207",

    "2012060208", "2013010101", "2013010102", "2013010103",

    "2013010104", "2013010105", "2013010106", "2013010107",

    "2013010108", "2013010201", "2013010202", "2013010203",

    "2013010204", "2013010301", "2013010302", "2013020101",

    "2013020102", "2013020103", "2013020104", "2013020201",

    "2013020202", "2013020203", "2013020204", "2013020301",

    "2013020302", "2013030101", "2013030102", "2013030103",

    "2013030104", "2013030105", "2013030106", "2013030107",

    "2013030108", "2013030109", "2013030110", "2013030111",

    "2013030112", "2013030113", "2013030114", "2013030115",

    "2013030116", "2013030117", "2013030118", "2013030119",

    "2013030120", "2013030121", "2013030122", "2013030123",

    "2013030124", "2013030125", "2013030126", "2013030127",

    "2013030128", "2013030129", "2013030130", "2013040101",

    "2013040102", "2013040103", "2013050101", "2013050102",

    "2013050201", "2013050202", "2013050203", "2013050301",

    "2013050302", "2013060101", "2013060102", "2013060103",

    "2013060104", "2013060105", "2013060106", "2013060201",

    "2013060202", "2013060203", "2013060204", "2013060205",

    "2013060206", "2013060207", "2013060208", "2013060209",

    "2013060210" };

    int n = b.length;

    System.out.println("数组长度:"+n);

    Class.forName("org.sqlite.JDBC");

    /*Connection conn = DriverManager

    .getConnection("jdbc:sqlite:d:/classtable.db");*/

    for (int j = 0; j 

    String file = "D:\\编程\\" + b[j] + ".csv";

    BufferedReader br = new BufferedReader(new InputStreamReader(

    new FileInputStream(file), "GBK"));

    String line;

    while ((line = br.readLine()) != null) {

    String[] value = line.split(",");

    String sql = "INSERT INTO [" + b[j] + "] VALUES('" + value[0]

    + "','" + value[1] + "','" + value[2] + "','"

    + value[3] + "','" + value[4] + "')";

    System.out.println(sql);

    }

    br.close();

    }

    }

    }

    我想先看看运行出的SQL语句,然后一直提示数组下标越界

    以下是运行结果:

    数组长度:89

    INSERT INTO [2012060101] VALUES('国际贸易实务','实2-205','MON1','8','11')

    INSERT INTO [2012060101] VALUES('财政学','教1-315','MON2','8','19')

    INSERT INTO [2012060101] VALUES('国际贸易实务','教1-313','MON3','1','11')

    INSERT INTO [2012060101] VALUES('中国对外贸易概论','教1-105','MON4','1','9')

    INSERT INTO [2012060101] VALUES('广告学概论','教2-106','TUE2','1','15')

    INSERT INTO [2012060101] VALUES('国际经济学','教1-206','TUE3','1','15')

    INSERT INTO [2012060101] VALUES('外贸英文函电','教1-113','TUE4','1','11')

    INSERT INTO [2012060101] VALUES('财政学','教1-315','WED1','8','19')

    INSERT INTO [2012060101] VALUES('国际贸易','教1-113','WED3','12','19')

    INSERT INTO [2012060101] VALUES('大学英语听说','教1-403','WED4','12','19')

    INSERT INTO [2012060101] VALUES('中国对外贸易概论','教1-105','WED4','1','9')

    INSERT INTO [2012060101] VALUES('国际贸易实务','教1-313','THU1','1','11')

    INSERT INTO [2012060101] VALUES('外贸英文函电','实1-211','THU2','8','11')

    INSERT INTO [2012060101] VALUES('外贸英文函电','教1-113','THU3','1','11')

    INSERT INTO [2012060101] VALUES('广告学概论','教2-106','THU4','1','15')

    INSERT INTO [2012060101] VALUES('国际贸易','教1-113','FRI1','12','19')

    INSERT INTO [2012060101] VALUES('大学英语听说','教1-403','FRI2','12','19')

    INSERT INTO [2012060101] VALUES('国际经济学','教1-206','FRI3','1','15')

    INSERT INTO [2012060201] VALUES('财政学','教2-203','MON2','8','19')

    INSERT INTO [2012060201] VALUES('保险学','教2-109','MON3','8','19')

    INSERT INTO [2012060201] VALUES('广告学概论','教2-106','TUE1','1','15')

    INSERT INTO [2012060201] VALUES('经济法','教1-206','TUE2','8','19')

    INSERT INTO [2012060201] VALUES('国际经济学','教1-206','TUE3','1','15')

    INSERT INTO [2012060201] VALUES('保险学','教2-109','WED2','8','19')

    INSERT INTO [2012060201] VALUES('财政学','教2-203','THU1','8','19')

    INSERT INTO [2012060201] VALUES('经济法','教1-206','THU2','8','19')

    INSERT INTO [2012060201] VALUES('广告学概论','教2-106','THU3','1','15')

    展开全文
  • 问题遇到的现象和发生背景 : 2016版本EXCEL运行到以下这两句时候,就会提示下标越界,怎么调试? Workbooks("2022年一季度集团测试指标模板-集团测试分析需求5G(宏).xlsm").Activate Workbooks(WBCurrent).Close ...
  • C语言数组下标越界

    2021-08-31 23:46:59
    数组越界的严重性 在 C 语言里,数组需为静态的。数组的大小需要在程序运行前就确定下来。 C语言数组越界的严重性...i自加到10时,a[10]属于数组下标越界。 详细分析图 1、栈把内存分配给数组,并且自上而下从小地址开

    数组越界的严重性

    在 C 语言里,数组需为静态的。数组的大小需要在程序运行前就确定下来。
    C语言数组越界的严重性在于对数组元素访问及修改的内容存在不确定性。
    这类没有预知性的修改会导致无法确定的错误,发生缓冲区泄露漏洞。
    这也就是数组越界的严重所在。

    代码如下所示:
    在这里插入图片描述
    数组里的下标从0开始。
    那么在上面代码只能访问:a[1]、a[2]、a[3]、a[4]、a[5]、a[6]、a[7]、a[8]、a[9]
    i自加到10时,a[10]属于数组下标越界。

    详细分析图

    1、栈把内存分配给数组,并且自上而下从小地址开始分配内存,对应于数组下标:
    在这里插入图片描述
    对数组进行内存分配之后进行数组循环赋值。数组下标为0~9在数组所分配的空间内。
    在这里插入图片描述
    由顶部代码可知数组访问将会越界,如图所示访问到数组范围之后,并且对越界空间进行操作,破坏原有数据。访问之后程序会破坏内存原有数据,导致缓冲区泄露,并且发生不可预知的错误。

    展开全文
  • C++中数组下标越界

    2021-12-03 20:14:04
    引言 最近突然想到当数组array有2个元素,而访问其array[2]时会不会编译错误的问题,答案是编译的时候不报错,只有运行...基于上述现象,说明程序在编译的时候没有进行下标越界的检查,当一个程序生成可执行文件的时候
  • 数组下标越界异常

    2021-11-19 10:17:30
    数组下标越界异常:ArrayIndexOutOfBoundsException\ int[] arr={1,2,3}; for (int i = 0; i <= arr.length; i++) { System.out.println(arr[i]); } 把i <= arr.length改为i < arr.length即可解决
  • string对象下标越界

    2021-10-14 15:27:24
    最近写代码时发生了这一问题,就是上边的程序,运行后会出现数组越界。 其实这是一个非常小的问题,原因是我自己把string当成了一个无穷大的数组,string可以无穷大,但是这并不能将他当成无穷大数组.
  • BUG-并行流与数组下标越界-思考与总结今天线上环境报异常,发现了一个之前没注意过的问题,记录一下。1. 异常信息异常信息如下:···Caused by: java.lang.ArrayIndexOutOfBoundsExceptionat java.lang.String....
  • publicclassclass2{publicstaticvoidmain(String[]args){char[]letter=getletter();... } } } 这是我的代码,然后输出的答案也没错,但是报错说越界了,请问一下是哪个地方越界了,为什么会这样? 展开
  • 数组下标越界异常解决方法

    千次阅读 2021-03-08 10:36:52
    数组下标越界异常解决方法
  • java新手求助 数组下标越界异常

    千次阅读 2021-03-13 16:49:36
    该楼层疑似违规已被系统折叠隐藏此楼查看此楼这是一个输入有n个数字的数组,选出k个最小值的函数。import java.util.*;public class example { public static void main(String[] args) {try{Scanner scan=new ...
  • Allen_Hv2019-12-11 19:23xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">4.0.0...
  • ArrayIndexOutOfBoundsException:数组下标越界异常! 二、小结 数组是相同数据类型(数据类型可以为任意类型)的有序集合 数组也是对象。数组元素相当于对象的成员变量 数组长度是确定的,不可变的。如
  • 数组的四个基本特点: 其长度是确定的,其一旦被创建,他的大小便不可以改变。 其元素必须是相同的类型,不允许出现...下标的合法区间:[0,length-1],如果越界会报错。 数组下标是像(0-9)这个样子的。 Arrayl
  • 刚刚学习Java不到一个星期,本来是搞C++的,没事学习Java,将来可以更好的想Android方向发展一下。...最后还是想到了,Java的下标越界检查啊。我的天啊。 检查了半天。不容易,该死的Java,可恨又可爱啊!
  • java下标越界问题

    2021-03-10 01:28:31
    (1)要显示出xxxxxxxxxxxxxxxx我写的程序publicclassa231{publicstaticvoidmain(String[]args){intN=Integer.parseInt(args[0]);for(inti=1;...}}}两题java都提示下标越界,求大神解答啊!! 展开
  • 这两天被人问了一个问题说假如C/C++访问下表越界的数组元素会报错么,于是充满好奇心的我动手试了一下,WTF,果然没有报错,但是会给程序带来莫名其妙的结果(比如十次的循环但是变成了死循环,但八次却可以)例:1 #...
  • 数组下标越界问题

    2021-11-29 19:06:25
    Exception in thread "main" java.lang....当使用不合法的数字下标输入访问数组时会报数组越界这种错误, 数组的起始下标下标0开始 数组arr的合法范围是[0, arr.length-1],当访问超出数组长度的下.
  • 在java中,解决数组下标越界的问题

    千次阅读 2021-02-12 15:39:42
    //获取文本内容publicstaticListgetText(StringfilePath){Listsimples=newArrayList();try{FileReaderreader=newFileReader(filePath);BufferedReaderbfRead...// 获取文本内容public static List getText(String ...
  • 2运行过程的检验:需要注意循环是否是闭合,with语句是否是闭合,参数的定义范围,数组的上下标是否越界等等。 3实际结果的检验:上面的第一第二都通过了,程序开始运行,但运行的结果不一定是你期望的结果。这就要...
  • 一个学生考试成绩录入程序的模块化设计,在编译时出现了数组下标越界错误提示:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0;at Ch3Demo7.main(Ch3Demo7.java:26)classCh3Demo7//...
  • 数组下标越界及小结

    2021-11-23 19:59:34
    public class Demo09 { public static void main(String[] args) { int[] a={1,2,3,4,5,6,7,8}; for (int i = 0;... i++) {//=去掉,下标越界,数组下标为[0,length-1] System.out.println(a[i]); } .
  • 在Excel中,如果有VBA代码,会经常遇到下标越界这个错误提示:Microsoft Visual Basic ~运行时错误'9'~下标越界,如下图所示:如下示例:如果使用数组时,数组的下标超出数组的可取值范围就会出现这个错误,这个数组...
  • importjava.util.*;classStacks{Vectors=newVector(100,50);inttop;intcount=0;voidInStacks(intdata){//进栈时间复杂度:1s.add(data);top=data;count++;}voidSho...import java.util.*;class Stacks{Vector s =new...
  • 数组,下标越界及小结 数组的四个基本特点 其长度是确定的。数组一旦被创建,它的大小就是不可以改变的。 其元素必须是相同类型,不允许出现混合类型。 数组中的元素可以任何数据类型,包括基本类型和引用类型。 ...
  • java 数组下标越界异常(ArrayIndexOutOfBoundsException) java 数组下标越界异常(ArrayIndexOutOfBoundsException)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 90,261
精华内容 36,104
关键字:

下标越界