在使用循环时,一定要注意循环的边界情况,在边界上不上心绝对是自己给自己挖坑,下面有一段c语言的代码
int main()
{
char *a = "qweqerds";
printf("%d ",a);
while(*a++ != '\0')
{
printf("%d ",a);
}
printf("%d ",a);
return 0;
}
在程序中,给字符字符串a包含8个字符+1个默认的’\0’,我们想要的是遍历整个字符串后使a指向’\0’的位置,这样的话a最终的地址应该是 48 的位置,在退出循环的时候a却指向了 49 的位置,如果我们想从最后一个位置重新开始写入一个字符串,在打印的时候将无法显示后来加上的字符串,因为在打印时’\0’会把后来的字符串屏蔽掉。
再看以下整个代码,while(*a++ != 0)这句代码是先判断*a是否等于’\0’,不管条件是否满足,都会执行a++;所以在最后的时候*a==’\0’之后a还会进行自加,所以此此时a就指向’\0’的下一个位置
如果改成下面这样
int main()
{
char *a = "qweqerds";
printf("%d ",a);
while(*a != '\0')
{
printf("%d ",a);
a++;
}
printf("%d ",a);
return 0;
}
可以看到最后a的值与最初的位置相差为8,此时a就指向的’\0’的位置了。
在使用while 循环时一定要注意循环条件的边界问题,确定循环后的数据依旧在自己的意料之内。