while 循环
1 while(condition) 2 { 3 //........ 4 }
循环在我们从事C语言开发的过程中可以说用的挺多的,但是今天想起了一个问题,源于我要在一个长字符串中查找特定字符串,于是我写了如下代码:
1 int main() 2 { 3 int index = 0; 4 while(index < UART_RXBUF_SIZE) 5 { 6 if(buf[index++] == 'o') 7 { 8 if(buf[index++] == 'p') 9 { 10 if(buf[index++] == 'e') 11 { 12 if(buf[index++] == 'n') 13 { 14 printf("TRUE!\n"); 15 return 1; 16 } 17 } 18 } 19 20 } 21 } 22 printf("FALSE!\n"); 23 return 0; 24 }
但是我发现这会存在访问数组越界的问题。比如buf里最后一个字符是‘o’,那么程序就会访问buf[UART_RXBUF_SIZE],这显然越界了。
但是这时我想:while循环会不断检测溢出吗?比如会检测环境是否正常,如果发现不正常则产生中断,自动退出,以至于不会发生段错误。经过测试,while循环并不会这么做,测试如下:
1 int arry[8] = {0,1,2,3,4,5,6,7}; 2 3 int main() 4 { 5 int i = 6; 6 while(i < UART_RXBUF_SIZE) 7 { 8 i++; 9 printf("%d\n",i); 10 i++; 11 printf("%d\n",i); 12 i++; 13 printf("%d\n",i); 14 i++; 15 printf("%d\n",i); 16 printf("%d\n",arry[i]); 17 } 18 }
其中i可取7、 8。所以我很好奇各种编译器对此的处理方式是怎么样的?(在VC6.0中上面程序最后输出为0)。
所以此文提到的查找字符串的代码中,要加入数组越界访问的条件。
当你坚持做一件完全正确的事情,有可能在很长一段时间内,你的价值都是零。
posted on 2016-03-18 19:33 Jeffrey.Downhouse 阅读(239) 评论(0) 编辑 收藏 举报