分享

数组应用错误

 WUCANADA 2012-05-16

数组应用典型错误

1、定义数组时,数组名与其它变量同名。

  在同一个作用域中,数组名不能与其他变量同名。

  如 int a,b,a[10],b[10];将导致语法错误。

  应为int A,B,a[10],b[10];  

1、定义数组时,未指定数组长度。

   定义数组时,必须指定数组长度,否则编译系统无法为数组分配内存单元。

   int a[]; 

   应为int a[100];

2、定义动态数组。

   C语言中,不允许定义动态数组。即数组长度不能是变量(或含有变量的表达式)。

   int n=30;

         int a[n]; 

   应为int a[30];/*表示数组长度的表达式中,不能包含变量*/

3、数组元素下标越界。

   C语言数组元素的下标是从0开始的,引用数组元素时下标不能越界。

   int a[10];/*数组元素为a[0],a[1]......a[9]*/ 

      a[10]=60

       应为int a[11];

      a[10]=60

   又如 int a[10],i;

      for(i=1;i<=10;i++)

        scanf("%d",&a[i]);       

   应为int a[10],i;

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

        scanf("%d",&a[i]);   

4、给数组元素整体赋值。

  只能在初始化时给数组元素整体赋值,而不能在一般赋值语句中给数组元素整体赋值。

    int a[10]

          a[10]={1,2,3,4,5,6,7,8,9,10};  /*此处a[10]看作一个数组元素,同时还存在下标越界*/

    int a[10]

          a={1,2,3,4,5,6,7,8,9,10};   /*此处数组名a地址常量,故不能进行赋值*/

    应为int a[10]={1,2,3,4,5,6,7,8,9,10};

4、输入数组元素不正确。

  C语言中通常采用单重循环来输入一维数组的元素。

    int a[10],i;

      scanf("%d",&a[i]);  /*缺少循环*/   

  此处因变量i未赋值,故运行时将会出错。不过即使i已经赋值,也只能输入一个数组元素,而不会输入

   全部数组元素。

  又如

   int a[10];

      scanf("%d",a);

  试图用一条scanf语句给整个数组输入数据  ,也是不可行的。

   应为int a[10],i;

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

       scanf("%d",&a[i]);

5、输出数组元素不正确。

   C语言中通常采用单重循环来输出一维数组的元素。

   int a[10]={1,2,3,4,5,6,7,8,9,10},i;

         printf("%d ",a[i]);  /*缺少循环*/

    此处因变量i未赋值,故运行时将会出错。不过即使i已经赋值,也只能输出一个数组元素,而不会输出

   全部数组元素。

  又如    

    int a[10]={1,2,3,4,5,6,7,8,9,10},i;

         printf("%d ",a);  

  试图用一条printf语句将整个数组数据输出  ,也是不可行的。

     应为int a[10]={1,2,3,4,5,6,7,8,9,10},i;      

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

       printf("%d ",a[i]);

5、定义字符数组长度不足。

   因字符串末尾隐含一个'\0'字符,故相应字符数组长度至少要比字符串中字符个数多1

   char a[5]="Hello";

   应为char a[6]="Hello";

   char a[]="Hello";

6、用scanf输入字符串时调用格式错误。

   scanf输入字符串时,使用%s格式符,此时输入项应为数组名。

   char a[30];

     scanf("%s",&a);

   应为scanf("%s",a);因为数组名本身就是一个地址,故不需要取地址运算符。

7、用printf输出字符串时调用格式错误。

   printf输出字符串时,使用%s格式符,此时输出项应为数组名。

   char a[30]="Hello World";

       printf("%s",a[30]);  /*此处a[30]看做数组元素(当然下标已越界),故与格式符%s不匹配*/

  应为char a[30]="Hello World";

          printf("%s",a);

8、字符串赋值错误。

    char a[30],b[30]="Hello World";

          a=b;a="Hello World";均为错误。因为数组名是地址常量,故不能对数组名a赋值。

  应为char a[30],b[30]="Hello World";

          strcpy(a,b);

     char a[30],b[30]="Hello World";

           int i;

           for(i=0;a[i]!='\0';i++)   

              a[i]=b[i];

          a[i]='\0';

     char a[30],b[30]="Hello World";

           int i;

           for(i=0;i<=strlen(b);i++)

             a[i]=b[i];       

9、字符串比较错误。 

   如 char a[30]="abcd",b[30]="abdc";

          if(a>b)       

    或if("abcd">"abdc")均为错误。

   因为数组名是地址常量,故a>b只是比较数组a和数组b的首地址大小。

   "abcd">"abdc"则是比较字符串"abcd"字符串"abdc"的首地址大小。

   应为if(strcmp(a,b)>0)

10gets函数调用格式错误。

  一个gets函数只能输入一个字符串,且gets函数的参数中不需要格式字符。

   char a[80],b[80],c[80];

      gets(a,b,c);

  gets("%s%s%s",a,b,c);均为错误。

   应为char a[80],b[80],c[80];

      gets(a);

      gets(b);

      gets(c);

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多