前记
c语言已经是一门经常吃饭的本领,本来是要有种看一眼,就知道哪儿出问题了才行,没想到,遇到实际问题的时候,才知道自己的修为不到家。还没有达到那种炉火纯青的境界。看来,不是这个世界没有机会,是自己的水平还有待提高啊。看来还是要好好积累吧。把不熟悉的知识点记录下来。做个备忘,免得后面再犯类似的错误。
实际例子:
其实,这个while循环本来很简单的事情,没想到加在一堆代码中间,居然把我给绕了进去。下面看一下这个代码:
#include
#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\n",i);
break;
}
// i++;
}
while (i++ < (cmd_rx_offset - FRAME_LEN_HEAD));
printf("bb cmd_rx_offset:%d \n",cmd_rx_offset);
cmd_rx_offset -= i;
printf("cc cmd_rx_offset:%d \n",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循环中的++计算错误,导致我的计算一直不对,后来把代码摘出来,反复查看并验证,才知道问题是出在这里了。