求助,数组越界问题
本帖最后由 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: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);
} 你定义的数组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这个元素就是数组越界
按照楼上的改下代码就对了. 一叶枫残 发表于 2021-2-11 17:23
你这个最后一个for循环写错了,你写成
那么问题来了,我输入6个字符,i==6,这个时候a不是变成了a ...
谢谢指点 han125416866 发表于 2021-2-11 17:55
你定义的数组a中的元素分别是a,a,a,a,a,a
你第一个while结束后i=6,最后一个for循环k= ...
感谢,最佳就给楼上的了
页:
[1]