У меня есть структура, чтобы сказать:
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]; }
это возможно?
здесь myarray это просто указатель на память.Там не зарезервировано место, поэтому ваш пример потерпит неудачу.
myarray
У вас есть два варианта:
Просто используйте уже имеющийся массив, это предполагает, что массив неfree'd перед структурой free'd:
instance->myarray = array;
резервная память и запоминание данных
instance->myarray = malloc(sizeof(int) * 5); memcpy(instance->myarray, array, sizeof(int) * 5);
Рассмотрим:
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'}}};
вы можете попробовать memcpy
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));