1

char [] 配列を取り、その値を別の配列にコピーする必要がありますが、毎回失敗します。

次の形式を使用して動作します。

char array[] = { 0x00, 0x00, 0x00 }

ただし、これを実行しようとすると:

char array[] = char new_array[];

new_array は元の配列とまったく同じですが、失敗します。

どんな助けでも親切にいただければ幸いです。

ありがとう

4

1 に答える 1

4

実行時にコピーするには、通常の C メソッドはstrncpyまたはmemcpy関数を使用します。

charコンパイル時に2 つの配列を同じ定数初期化子に初期化する必要がある場合は、次のように使用することに行き詰まっている可能性があり#defineます。

#define ARRAY_INIT { 0x00, 0x00, 0x00 }
char array[] = ARRAY_INIT;
char new_array[] = ARRAY_INIT;

通常はより良い実装があるため、これが行われることはめったにありません。

EDIT:さて、実行時に配列をコピーしたいと思います。これは、 (すべての場所の)memcpy一部で行われます。<string.h>

私が正しく読んでいれば、次のような初期条件があります。

char array[] = { 0x00, 0x00, 0x00 };
char new_array[] = { 0x01, 0x00, 0xFF };

次に、配列の内容を変更して何かを行い、それが完了したらarray、 match に設定しnew_arrayます。それはまさにこれです:

memcpy(new_array, array, sizeof(array));
/*        ^         ^          ^
          |         |          +--- size in bytes
          |         +-------------- source array
          +-------------------------destination array
 */

ライブラリの作成者は、割り当てと同じ順序であるため、最初に目的地で引数を並べることを選択しました: destination = source

このようなプリミティブ配列を使用して C、Objective-C、または C++ の配列をコピーする言語レベルの組み込み手段はありません。C++ は人々に の使用std::vectorを奨励し、Objective-C は の使用を奨励していますNSArray

しかし、私はまだあなたが何を望んでいるのか正確にはわかりません.

于 2012-06-03T01:34:00.537 に答える