2011-02-08 12 views
0
struct item_CHECK_LIST_data 
{ 

    char list[MAX_CHECK_LIST_OPTIONS + 1][MAX_ITEM_TEXT_LEN]; 
    char checkeditems[MAX_CHECK_LIST_OPTIONS + 1];//which are checked 

    char number_of_options; 
}; 

私はこれをmemcopyでコピーできますか?memcopyと2dの配列

私はmemcopyができないことによって説明されるだろう奇妙なバグを持っている...

+2

あなたの「奇妙なバグ」は、memcpyではなく自分のものである可能性が高いです...コードを投稿してください。 –

+0

問題を引き起こしているコードを投稿することができます。 –

+1

"memcopy"とは何ですか?正確であれば、より役立つ回答が得られます。 –

答えて

5

はい、あなたはCでmemcpy 2次元配列は、彼らが実際に2次元配列ではなく、1Dいることを条件として、することができますポインタの配列。 2次元配列はメモリ内に連続して配置されているため、memcpyはすべてのブロックを正しく読み込みます。しかし、あなたの配列がより多くの1D配列へのポインタの1次元配列である場合、memcpyはポインタだけをコピーし、ディープコピーではなく浅いコピーになります。

2

コピーするにはsizeof()を使用しましたか?構造体の要素は、サイズが部分の合計よりも大きくなるようにパディングすることができます。

+0

'char'にはパディングがありません。 OPは、構造体自体にではなく、構造体に含まれる配列をコピーしています。 –

+1

@Chrisそうではありません。 –

+0

@Jim - 申し訳ありません。私は奇妙な理由のために私のiPhoneからのSOを使用することができ、タイプするのに時間がかかります。私が読んだように、OPの質問は、この答えが想定しているように、2Dの 'struct'配列ではなく、2Dの' char'配列(これは 'struct'のメンバーである)をコピーすることです。 'N 'と' sizeof(char [N]) 'の間に違いはないはずですので、@ Martinの答えはここではあまり役に立ちません(より一般的なケースですが)。 –

0

コピーする構造体全体の場合は、memcpyを使用しないでください。割り当てをするだけで、=トークンが作成されます。