Как инициализировать char ** внутри структуры

У меня есть структура

struct cmd{ char **tokenized_cmd; int num_params;
}

в какой-то момент мне нужно инициализировать tokenized_cmd и передать значения из другого массива в него

как это сделать?

1 ответ

#include <stdio.h>
char *arr[] = {"one", "two"};
struct cmd { char **tokenized_cmd; int num_params;
} x = {arr, 2};
int main(void)
{ int i; for (i = 0; i < x.num_params; i++) printf("%s\n", x.tokenized_cmd[i]); return 0;
}
</stdio.h>

или

#include <stdio.h>
struct cmd { char **tokenized_cmd; int num_params;
};
int main(void)
{ char *arr[] = {"one", "two"}; struct cmd x = {arr, 2}; int i; for (i = 0; i < x.num_params; i++) printf("%s\n", x.tokenized_cmd[i]); return 0;
}
</stdio.h>

или более гибкими:

#include <stdio.h>
#include <stdlib.h>
struct cmd { char **tokenized_cmd; int num_params;
};
struct cmd *cmd_init(char **token, int params)
{ struct cmd *x = malloc(sizeof *x); if (x == NULL) { perror("malloc"); exit(EXIT_FAILURE); } x->tokenized_cmd = token; x->num_params = params; return x;
}
int main(void)
{ char *arr[] = {"one", "two"}; struct cmd *x = cmd_init(arr, 2); int i; for (i = 0; i < x->num_params; i++) printf("%s\n", x->tokenized_cmd[i]); free(x); return 0;
}
</stdlib.h></stdio.h>

licensed under cc by-sa 3.0 with attribution.