0

配列を変換して、void *要素を持つ構造体に配置し、別の配列に戻す必要があります。

unsigned short array[size];
//do something to the array

typedef struct ck{

void * arg1;
void * arg2;
void * arg3;


} argCookie;


argCookie myCookie;

myCookie.arg2=malloc(sizeof(array));//alloc the necessary space
memcpy(myCookie.arg2,&array,sizeof(array));//copy the entire array there


//later....


unsigned short otherArray[size];
otherArray=*((unsigned short**)aCookie.arg2);

この最後の行がコンパイルされないことが起こります...それはなぜですか?明らかに私はどこかを台無しにしました...

ありがとうございました。

4

3 に答える 3

1

配列にポインタを割り当ててコピーすることはできません。配列はポインタではありません。また、配列に割り当てることはできません。配列の要素にのみ割り当てることができます。

memcpy()を使用して、配列にコピーできます。

//use array, or &array[0] in memcpy,
//&array is the wrong intent (though it'll likely not matter in this case
memcpy(myCookie.arg2,array,sizeof(array));

//later....

unsigned short otherArray[size];
memcpy(otherArray, myCookie.arg2, size);

それはあなたが知っていることを前提としていますsize、そうでなければあなたはあなたのクッキーの1つにもサイズを置く必要があります。必要なものによっては、にコピーする必要がない場合があります。CookieotherArrayのデータを直接使用するだけです。

unsigned short *tmp = aCookie.arg2;
//use `tmp` instead of otherArray.
于 2012-10-19T11:54:03.507 に答える
1

配列に割り当てることはできません。それ以外の

otherArray=*((unsigned short**)aCookie.arg2);

memcpyサイズがわかっている場合は、もう一度使用してください。

memcpy(&otherArray, aCookie.arg2, size*sizeof(unsigned short));

サイズがわからない場合は、運が悪いです。

于 2012-10-19T11:51:41.733 に答える
0
unsigned short* otherArray = (unsigned short*)aCookie.arg2

次にotherArray[n]、要素にアクセスするために使用できます。範囲外のインデックスに注意してください。

于 2012-10-19T11:55:25.097 に答える