我正在使用微控制器并得到以下工作代码:
.h 文件
const static uint8_t state0[] = "Off";
const static uint8_t state1[] = "ROMLoad";
const static uint8_t state2[] = "RAMLoad";
const static uint8_t state3[] = "PacketSend";
const static uint8_t state4[] = "Process";
.c 文件
switch (coapapp_vars.state) {
case 0:
packetfunctions_reserveHeaderSize(msg, sizeof(state0) - 1);
memcpy(&msg->payload[0], &state0, sizeof(state0) - 1);
break;
case 1:
packetfunctions_reserveHeaderSize(msg, sizeof(state1) - 1);
memcpy(&msg->payload[0], &state1, sizeof(state1) - 1);
break;
case 2:
packetfunctions_reserveHeaderSize(msg, sizeof(state2) - 1);
memcpy(&msg->payload[0], &state2, sizeof(state2) - 1);
break;
case 3:
packetfunctions_reserveHeaderSize(msg, sizeof(state3) - 1);
memcpy(&msg->payload[0], &state3, sizeof(state3) - 1);
break;
case 4:
packetfunctions_reserveHeaderSize(msg, sizeof(state4) - 1);
memcpy(&msg->payload[0], &state4, sizeof(state4) - 1);
break;
}
我确实想通过在切换后调用 memcpy 来更改此代码以缩短文件(上传的代码更少)。因此,我需要使用一个指针,该指针指向 .h 中的正确值,方法是使用案例来填充指针。不幸的是,我无法让它工作。所以我很不知道我需要在哪里使用 * 或 & 或根本不使用它来让它工作。我尝试了很多不同的方法,但没有一个成功。
那么问题是:我使用什么类型的 uint8_t (uint8_t/uint8_t*/uint8_t**) 来初始化指向其中一个 char 数组的变量?如何填写那个(指针)变量(ptr = state/ptr = &state/ptr=&state[0]/...)?如何在 memcpy 函数中使用(指针)变量(ptr/&ptr/*ptr/&(*ptr)/...)?
我知道我将需要使用我自己设置的大小的变量。
更多信息(如果需要):此代码用于 OpenWSN。我正在使用物联网设备/微控制器。我正在使用他们的 COAP 实现将信息发送到浏览器。
编辑:reserveHeaderSize 函数和 memcpy 函数都将放在切换之后。正如正确答案所指出的,这很简单,但我一直忽略了一个小小的愚蠢错误:我没有删除第三个参数中的 sizeof,所以我基本上是在做 sizeof(size)。德普