FCG121 发表于 2021-2-11 17:09:24

求助,数组越界问题

本帖最后由 FCG121 于 2021-2-11 17:10 编辑

#include <stdio.h>

int main()
{
    char a, ch;
    int i = 0;
   
    while ((ch = getchar()) != '\n')
    {
      a = ch;
      i++;
    }
   
    printf("%d\n", i);
   
    for (int j = 0; j < i; j++)
    {
      if (j == i - 1)
      {
            printf("%c ", a);
          break;
      }
      
      printf("%c ", a);
    }

    printf("\n");
      
    for (int k = i; k > 0; k--)
    {
      printf("%c", a);
    }
   
    printf("\n");
   
    return 0;
}


请教,此代码出现数组越界问题,望大佬解释

一叶枫残 发表于 2021-2-11 17:23:51

本帖最后由 一叶枫残 于 2021-2-11 17:25 编辑

你这个最后一个for循环写错了,你写成
for (int k = i; k > 0; k--)
{
   printf("%c", a);
}
那么问题来了,我输入6个字符,i==6,这个时候a不是变成了a了吗,这个就越界了,
然后,我输入3个字符回车,i==3,,而你赋值是从a开始到a,你写的还是k > 0,这个时候a最大变成a,也就是从a开始打印到a,这个时候打印的 a不是个空值吗?
修改后应该是
for (int k = i-1; k >= 0; k--)
{
    printf("%c", a);
}

han125416866 发表于 2021-2-11 17:55:43

你定义的数组a中的元素分别是a,a,a,a,a,a
你第一个while结束后i=6,最后一个for循环k=i;k>0;k++,就相当于k=6,当k=1时结束了循环,
这时你输出的元素分别是a,a,a,a,a,a,你本应该是输出 a,a,a,a,a,a
多出来的a这个元素就是数组越界
按照楼上的改下代码就对了.

FCG121 发表于 2021-2-11 17:58:02

一叶枫残 发表于 2021-2-11 17:23
你这个最后一个for循环写错了,你写成

那么问题来了,我输入6个字符,i==6,这个时候a不是变成了a ...

谢谢指点

FCG121 发表于 2021-2-11 17:58:42

han125416866 发表于 2021-2-11 17:55
你定义的数组a中的元素分别是a,a,a,a,a,a
你第一个while结束后i=6,最后一个for循环k= ...

感谢,最佳就给楼上的了
页: [1]
查看完整版本: 求助,数组越界问题