为啥出现数组下标越界的情况
为什么出现数组下标越界的情况?#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始终是第一个元素的值
[解决办法]
你这个for循环里的*str!='\0'没有起到限定条件的作用,因为str始终指向的是第一个元素。如果你要这么写,你在printf函数前面加一个str++
[解决办法]str是一个指针,指针的值无法通过下标来改变,你改变的只是下标,指针本身的值没有改变啊,比如str[6] = *(str + 6),str的值本身没有变化啊。