我有一个结构要说:
struct mystruct {
int *myarray;
}
在我的主要功能中,我想将预定义数组的值分配给“ myarray”。
int main(){
int array[5] = {1,2,3,4,5};
//how to "assign" array values to myarray ?;
}
我想避免像这样进行作业分配:
struct mystruct str = malloc(sizeof(mystruct));
for(int i = 0;i<size_of_array;i++){
str->myarray[i] = array[i];
}
这可能吗?
答案 0 :(得分:1)
struct mystruct {
int *myarray;
}
此处myarray
只是指向内存的指针。那里没有保留空间,因此您的示例将失败。
您有两个选择:
只需使用您已有的数组,这将假定在释放结构之前未释放数组:
instance->myarray = array;
保留内存并存储数据
instance->myarray = malloc(sizeof(int) * 5);
memcpy(instance->myarray, array, sizeof(int) * 5);
答案 1 :(得分:0)
您可以尝试memcpy
struct->array = malloc(sizeof(some_array));
memcpy(struct->array, some_array, sizeof(some_array));
您的情况是
str->array = malloc(sizeof(array));
memcpy(str->array, array, sizeof(array));
答案 2 :(得分:0)
考虑:
typedef struct test
{
int i;
char c[2][5];
} test;
这可以使用以下方法初始化:
test t = {10, {{'a','b','c','d','\0'}, { 0 }}};
// or
test t = {10, {{'a','b','c','d','\0'}, {'x','y','z','v','\0'}}};