结构变量内部的数组成员

时间:2018-06-21 16:14:48

标签: c arrays

我的结构如下

StackLayout

我有一个如下的结构变量

typedef struct s_CanMsg
{
    uint32_t id;
    uint16_t timestamp;
    uint8_t  data[8];
    uint8_t  dlc;
    bool_t   isExtended;
    bool_t   isRemote;
} s_CanMsg_t;

现在我正尝试将数组传递给结构变量的数据成员,如下所示:

 s_CanMsg_t CANEraseResponse;

这显示语法错误,如何将数据传递给具有数组成员的结构变量?预先感谢。

4 个答案:

答案 0 :(得分:4)

定义变量时可以初始化整个结构:

{
  "dependencies": {
    "@tensorflow/tfjs": "^0.11.5",
    "@tensorflow/tfjs-node": "^0.1.7"
  },
  "scripts": {
    "postinstall": "yarn upgrade --pattern @tensorflow"
  }
}

您还可以使用指定符来仅显式初始化数组成员;

s_CanMsg_t CANEraseResponse = {
    some_value_for_id,
    some_value_for_timestamp,
    {0x00, 0xFF, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00},
    some_value_for_dlc,
    some_value_for_isExtended,
    some_value_for_isRemote
};

然后所有其他成员将初始化为零。

当然,您可以定义一个临时数组并将其复制到结构数组中:

s_CanMsg_t CANEraseResponse = {
    .data = {0x00, 0xFF, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00}
};

最后,如果以上方法都不可接受,那么剩下的唯一解决方案是显式分配给数组的每个元素:

static uint8_t data[8] = {0x00, 0xFF, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00},

s_CanMsg_t CANEraseResponse;
memcpy(CANEraseResponse.data, data, sizeof data);

答案 1 :(得分:1)

您使用的符号只能用于初始化数组。声明struct变量后,就可以跳过初始化。但是,您可以使用称为“指定的初始值设定项”的方法来做到这一点,例如:

s_CanMsg_t CANEraseResponse = {.data= {0x00, 0xFF, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00}};

答案 2 :(得分:0)

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> <div class="container-fluid"> <div class="row"> <div class="col-md-3"> <div class="panel panel-primary"> <div class="panel-heading"> <h3 class="panel-title">GENERAL</h3> </div> <div class="panel-body"> <a href="#" data-toggle="modal" data-target="#exampleModal" data-whatever="Privatpolitik">Privacy Policy</a><br/> <div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">&times;</span> </button> <h4 class="modal-title" id="exampleModalLabel">Privacy Policy</h4> </div> <div class="modal-body"> <div class="modal fade bs-example-modal-lg" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel"> <div class="modal-dialog modal-lg" role="document"> <div class="modal-content"> Text for privacy Policy </div> </div> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-primary" data-dismiss="modal">Luk</button> </div> </div> </div> </div> </div> </div> </div> </div> </div>指的是CANEraseResponse.data[8]成员的第9个元素(因为数组是从零开始的。请尝试删除data

编辑/说明:删除[8]不会解决您的问题,但是您应该意识到[8]指向CANEraseResponse.data[8]数组之外的位置。

答案 3 :(得分:0)

您不能直接在C中分配数组。除了其他答案中所示的初始化技术之外,还可以使用复合文字和memmove()(或memcpy()):

memmove(CANEraseResponse.data, (uint8_t[]){ 0x00, 0xFF, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00 }, sizeof(CANEraseResponse.data));