zoukankan      html  css  js  c++  java
  • 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循环中的++计算错误,导致我的计算一直不对,后来把代码摘出来,反复查看并验证,才知道问题是出在这里了。

  • 相关阅读:
    MVC系列-7.更新
    MVC系列-6.注册页面
    MVC系列-5.详细信息
    MVC系列-4.布局页
    MVC系列-3.数据显示
    MVC系列-2.数据处理-登陆
    MVC系列-1.MVC入门
    bootstrap table 服务器端分页--ashx+ajax
    swift学习第八天:元组
    swift学习第七天:字典
  • 原文地址:https://www.cnblogs.com/dylancao/p/12060088.html
Copyright © 2011-2022 走看看