0

私は学んでおり、次の配列コピーを実行するための最良の方法を知りたいのですが、このコードを検討してください。

void Cast1LineSpell(UINT Serial, char *chant)
{
    byte packet[] = { 0x0F, 0x03, 
        (Serial >> 24) & 0xFF, (Serial >> 16) & 0xFF,(Serial >> 8) & 0xFF, Serial & 0xFF, 
        0x9A, 0x92, 0x00, 0x00, 0x00, 0x1A };

    byte prepareSpell[2] = { 0x4D, 0x01 };

    byte chant_length = sizeof(chant) / sizeof(chant[0]);
    byte chant_name[] = { 0x4E, chant_length, }; // <= how can i put the bytes in chant* into the rest of this array, and then append bytes 0x00 and 0x4E on to the end of it?
}

の中にあるバイトを*chant入れて、最後に入れて、最後にバイトをchant[]追加するにはどうすればよいですか?0x000x4E

誰かが解決策を提供できますか?とても有難い。

4

2 に答える 2

0

動的配列を使用しているため、sizeof(chant)は常にポインターのサイズになりsizeof(chant) / sizeof(chant[0])、配列内の要素の数にはなりません。これは静的配列に対してのみ機能します。

また、chantこれは単なるエラーであると再宣言しています。

結論として、の要素の数がわからないため、chantやりたいことを実行する方法はありません。

于 2012-12-23T00:45:06.983 に答える
0

char chant[]私の理解によると、C++ では、関数に渡されるすべての配列は、それらが静的に割り当てられているか、動的に割り当てられているか、または引数を, として記述しても (つまり、最初の要素のアドレスのみが渡されます)、ポインターとして扱われます。

例:

void f(int value[]){
    cout<<"size in f: "<<sizeof(value)/sizeof(int)<<endl;
}

int main(){
    int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8 };

    cout<<"size in main: "<<sizeof(arr)/sizeof(int)<<endl;

    f(arr);

    return 0;
}

結果は次のとおりです。

size in main: 8
size in f: 1

ご覧のとおり、 inは と同じで、f()はポインターのサイズです。value[]value *sizeof(value)

配列を関数に渡すときは、(常に) 長さも渡す必要があります。

void f(int value[], size_t size){
    cout<<"size in f: "<<size<<endl;
}

int main(){
    int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8 };

    size_t size = sizeof(arr)/sizeof(int);

    cout<<"size in main: "<<size<<endl;

    f(arr, size);

    return 0;
}

出力:

size in main: 8
size in f: 8
于 2012-12-23T03:51:57.357 に答える