質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

7393閲覧

C++での可変長配列を含んだ構造体について

Shirata

総合スコア38

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

1クリップ

投稿2017/07/13 03:15

編集2017/07/13 06:28

###前提・実現したいこと
要素の中間で可変長配列を含む構造体を実現したい

###該当のソースコード

C++

1typedef struct { 2 byte data8byte[8]; 3 byte data2byte[2]; 4 byte kahenA[]; 5 byte data6byte[6]; 6 byte kahenB[]; 7} test_struct;

上記、kahenBが可変長配列であることに問題はありませんが
kahenAが可変長配列であるため、kahenAにデータを設定するとdata6byteやkahenB
の領域が壊れてしまいます。

上記の様な構造体を実現したいのですが、不可能でしょうか。

###補足情報(言語/FW/ツール等のバージョンなど)
g++ 4.9.3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

C++ならSTLを使えばいいのでは?

C++

1struct test_struct { 2 std::array<byte, 8> data8byte; 3 std::array<byte, 2> data2byte; 4 std::vector<byte> kahenA; 5 std::array<byte, 6> data6byte; 6 std::vector<byte> kahenB; 7}

全部vectorでもいいような気もしますが。

投稿2017/07/13 03:20

LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Shirata

2017/07/13 04:19

回答ありがとうございます。 追加での質問となり恐縮ですが、この場合メモリの配置として 連続した領域になっておりますか。 【例】 OK 0xFF00 : [kahenA(16byte)領域] 0xFF10 : [data6byte領域] 0xFF16 : [kahenB(32byte)領域] NG 0xFF00 : [kahenA(16byte)領域] 0xFFBB : [data6byte領域] 0xFFF0 : [kahenB(32byte)領域]
LouiS0616

2017/07/13 05:00

vectorの構造は単なる配列ではないので、OKのようにはならないと思います。
Shirata

2017/07/13 05:27

回答ありがとうございました。 詳細な説明を頂きましたのでベストアンサーとさせていただきます。
guest

0

バイナリデータに構造体をラップして情報を読み取る時など、構造体に長さゼロの配列を置くのはテクニックとしてよくあります。
(それでも長さゼロの配列は構造体の一番最後に配置します、途中で配置するとメモリ破壊を引き起こします)
こうすることにより、可変長のバイナリフォーマットをスマートに読むことができたりしますが、どちらかというと中級者以上のテクニックですね。

インスタンスを作成する構造体でしたら、STLを使うべきです。

投稿2017/07/13 03:34

pashango2

総合スコア930

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Shirata

2017/07/13 04:20

STLについて詳しく調べようと思います。 回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問