我的结构如下
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;
这显示语法错误,如何将数据传递给具有数组成员的结构变量?预先感谢。
答案 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">×</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));