本文共 659 字,大约阅读时间需要 2 分钟。
在使用循环时,一定要注意循环的边界情况,在边界上不上心绝对是自己给自己挖坑,下面有一段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 循环时一定要注意循环条件的边界问题,确定循环后的数据依旧在自己的意料之内。