while 循环

Posted ^_^

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)。

所以此文提到的查找字符串的代码中,要加入数组越界访问的条件。

以上是关于while 循环的主要内容,如果未能解决你的问题,请参考以下文章

如何在微控制器按钮上使while循环更快?

Python3练习题系列(03)

for循环结构

常用python日期日志获取内容循环的代码片段

无限循环 - 延迟 - 单独的线程

使用从循环内的代码片段中提取的函数避免代码冗余/计算开销