将void *转换为数组

时间:2012-10-19 11:48:36

标签: c arrays malloc memcpy

我需要将数组转换为具有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);

碰巧这最后一行不会编译...... 这是为什么?显然我已经搞砸了......

谢谢。

3 个答案:

答案 0 :(得分:1)

您无法分配数组。而不是

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

如果您知道尺寸,请再次使用memcpy

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

如果你不知道大小,那你就不走运了。

答案 1 :(得分: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,否则您需要将大小放在一个Cookie中。 根据您的需要,您可能不需要复制到otherArray,只需直接使用Cookie中的数据:

unsigned short *tmp = aCookie.arg2;
//use `tmp` instead of otherArray.

答案 2 :(得分:0)

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

然后您可以使用otherArray[n]来访问元素。谨防一个越界索引。