Keil IDE 自动改变我的字符数组orrignal值

Keil IDE automatically changing my char array orrignal value

我正在将 uint8_t 数组转换为 char 数组,然后使用 gsm 模块传输它,但是在将 uint8_t 转换为 char 时出现问题,它的值发生变化(例如,十六进制值 0455 有时变为 0400 00 )

我也试过将keil优化level3改成level2,但遇到同样的问题

这是我的代码

    uint8_t b_id[2]={11, 12};
    char bike_id[2]={0}; 
    ...
    ...
    {
      ...
      ...
      //send id data
      for(i=0; i<2; i++)
      {
            sprintf(bike_id, "%02x", b_id[i]);
            sim808_send_tcp_tx(bike_id, 2);
      } 

    }

问题出在这两行:

char bike_id[2]={0};
...
sprintf(bike_id, "%02x", b_id[i]);

你忘记了 C 中的字符串实际上叫做 null-terminated byte stringsnull-terminated 部分很重要,这意味着两个字符的字符串实际上需要 three 个字符:字符串的两个字符,加上终结者。

在你的情况下,因为你在数组 bike_id 中只有两个字符,所以 sprintf 调用将写终止符越界,导致 未定义的行为.

简单的解决方案?使bike_id三个个字符长。