首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

为啥出现数组下标越界的情况

2013-10-01 
为什么出现数组下标越界的情况?#include stdio.hint main(){char *strapple ipodint ifor(i0*str

为什么出现数组下标越界的情况?
#include <stdio.h>

int main()
{
char *str="apple ipod";
int i;
for(i=0;*str!='\0';i++)
{
printf("str[%d]=%c\n",i,str[i]);
}

return 0;
}


问题:
       编译没有问题,但是运行的时候出现数组下标越界的情况,请问为什么? 在循环里面不是已经设置了 " *str!='\0' " ?   为什么还出现这样的下标越界情况?    如果将 *str改成str[i]则不会。
[解决办法]
你这个是有问题的,*str始终指向的是首地址,不会出现*str等于'\0'的情况,所以i++会出现越界的情况
[解决办法]
初学c,对指针了解不深,建议在循环或函数中,要么用指针,要么用下标,不要2者混用。
你在打印值的时候,用了下标方式访问数组str[i],随着i的++,str[i]也不断指向下一个元素。最后数组越界。
但是你判断却用的是*str,应该用str[i]来判断是否结束。在你的循环中,没有用str++来控制str指向下一个元素,所以*str始终是第一个元素的值
[解决办法]

引用:
#include <stdio.h>

int main()
{
char *str="apple ipod";
int i;
for(i=0;*str!='\0';i++)
{
printf("str[%d]=%c\n",i,str[i]);
}

return 0;
}


问题:
       编译没有问题,但是运行的时候出现数组下标越界的情况,请问为什么? 在循环里面不是已经设置了 " *str!='\0' " ?   为什么还出现这样的下标越界情况?    如果将 *str改成str[i]则不会。



你这个for循环里的*str!='\0'没有起到限定条件的作用,因为str始终指向的是第一个元素。如果你要这么写,你在printf函数前面加一个str++
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

#include <stdio.h>

int main()
{
char *str="apple ipod";
int i;
for(i=0;*str!='\0';i++)
{
printf("str[%d]=%c\n",i,str[i]);
}

return 0;
}


问题:
       编译没有问题,但是运行的时候出现数组下标越界的情况,请问为什么? 在循环里面不是已经设置了 " *str!='\0' " ?   为什么还出现这样的下标越界情况?    如果将 *str改成str[i]则不会。



你这个for循环里的*str!='\0'没有起到限定条件的作用,因为str始终指向的是第一个元素。如果你要这么写,你在printf函数前面加一个str++



            还是想请教一下,既然str[i]里面的i已经++了,那么str的下标也应该++了才对,为什么说str还是指向第一个云元素?


str是一个指针,指针的值无法通过下标来改变,你改变的只是下标,指针本身的值没有改变啊,比如str[6] = *(str + 6),str的值本身没有变化啊。

热点排行