c代码中while循环的一个死机问题引发的思考

前记

  c语言已经是一门经常吃饭的本领,本来是要有种看一眼,就知道哪儿出问题了才行,没想到,遇到实际问题的时候,才知道自己的修为不到家。还没有达到那种炉火纯青的境界。看来,不是这个世界没有机会,是自己的水平还有待提高啊。看来还是要好好积累吧。把不熟悉的知识点记录下来。做个备忘,免得后面再犯类似的错误。

实际例子:

  其实,这个while循环本来很简单的事情,没想到加在一堆代码中间,居然把我给绕了进去。下面看一下这个代码:

#include <stdio.h>

#define FRAME_LEN_HEAD 4

typedef unsigned char uint8_t;

static int cmd_rx_offset = 0;

void test_cmd(uint8_t *cmd_buffer_begin, int len)
{
    
            int i = 0;
            cmd_rx_offset = len;
    
            do
            {
                if ((*(cmd_buffer_begin + i + 0) == 0x89)
                    && (*(cmd_buffer_begin + i + 1) == 0xAB)
                    && (*(cmd_buffer_begin + i + 2) == 0xCD)
                    && (*(cmd_buffer_begin + i + 3) == 0xEF))
                {
                    printf("find the right cmd break:%d
",i);
                    break;
                }
    
               // i++;
            }
            while (i++ < (cmd_rx_offset - FRAME_LEN_HEAD));
    
            printf("bb cmd_rx_offset:%d 
",cmd_rx_offset);
            cmd_rx_offset -= i;
            printf("cc cmd_rx_offset:%d 
",cmd_rx_offset);

}

int main()
{
        uint8_t testa[20] = {0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0x10,0x11,0x12,0x13,0x14,0x15,0x88,0x88,0xAB,0xCD,0xEF};

        test_cmd(testa,20);

        return 0;
}
     

错误在哪儿?这个函数返回值一直是这样的:
bb cmd_rx_offset:20
cc cmd_rx_offset:3
由于当初把while循环中的++计算错误,导致我的计算一直不对,后来把代码摘出来,反复查看并验证,才知道问题是出在这里了。

原文地址:https://www.cnblogs.com/dylancao/p/12060088.html