Как инициализировать 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.