2011-08-02 24 views
0

制約は連続するメモリであることです。理由は、これは、その形式で2D配列として期待される別の言語のレガシーコードに送信されているためです。次の制約を使用して固定長文字列の配列を動的に作成する方法

のでesentially私はabc, def20バイト長のthats空間の一部である

char *temp[20] = { "abc", "def"}; 

などを送りたいです。 今、私はこの配列を動的に作成し、多くの文字を20文字以下に追加したいと考えています。

そして、それを別のレイヤーに配列として送ります。 これを行う最も良い方法は何ですか?

+3

なぜあなたはタグとして回答を与えているのですか? std :: vectorを使用してください... – KillianDS

+0

いくつの文字列を渡しますか?固定されていなければ 'std :: vector'が良い選択です。 – iammilind

答えて

1

std::vector< std::array<char, 20> >

vectorが動的に複数の文字列のために多くのメモリを割り当てることができますトリックを行います、タイプstd::array<char,20>vectorの各メンバーが実際に20文字(任意のと同じように、などのコピー上の境界を確認することを確認していることを保証しますアレイ)。

これは新しいC++標準のIIRC用です。古いコンパイラではサポートされない可能性があります。代わりにboost.arrayを使用してください。

+0

ありがとう、しかし、私は何を使用しているstd :: arrayサポートがない場合はどうですか? – AMM

+0

@AMM: ''と 'std :: tr1 :: array'を試してください。あなたのコンパイラが古代でない限り、あなたはこれを持っている可能性が高いです。 –

+0

@AMM - boost.Arrayを使うか、20文字の配列をカプセル化するクラスを作成するだけです(これは 'std :: array'と同じです)。ベクトルの 'T'は代入可能でなければならず、' char [] 'はそうではありません。 – littleadv

関連する問題