をuint8_tへのポインタといくつかのトラブルを抱えて、私はマイクロコントローラで働いていると、作業のコードを以下ました:C:[]
.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から正しい値を指すポインタを使う必要があります。 残念ながら、私はそれを動作させることができませんでした。だから私は*または&を使用する必要があるところでは、まったく無名です。私はいろいろな方法を試しましたが、どれも成功しませんでした。
質問は次のとおりです。char配列の1つを指す変数を初期化するために使用するuint8_t(uint8_t/uint8_t */uint8_t **)のタイプは何ですか? (ポインタ)変数(ptr = state/ptr = &状態/ ptr = &状態[0]/...)を入力するにはどうすればよいですか? memcpy関数(ptr/& ptr/* ptr/&(* ptr)/ ...)で変数(ポインタ)を使用する必要はありますか?
私はサイズのために自分自身を設定した変数を使う必要があることを知っています。
さらに詳しい情報:このコードはOpenWSNで使用されています。私はIoTデバイス/マイクロコントローラで作業しています。私は彼らのCOAP実装を使って情報をブラウザに送ります。
編集:スイッチの後にreserveHeaderSize関数とmemcpy関数の両方が配置されます。 正解で指摘したように、これはかなりシンプルですが、私は自分の小さな愚かなエラーを見落とし続けました。私は基本的にsizeof(サイズ)を行っていたので、第3引数でsizeofを削除しませんでした。 Derp
「const static」は廃止されていることにご注意ください。 Cは 'static const'を代わりに使用します。また、元のリテラルを直接使用するのではなく、元のリテラルの複数のコピー(各翻訳単位で別々のセット)を持つことを主張する理由は、すぐには分かりません。 'sizeof'を使えるようにするには? – AnT