C 如何使用strdup分配具有给定字符数组的结构?

C 如何使用strdup分配具有给定字符数组的结构?,c,arrays,struct,initialization,C,Arrays,Struct,Initialization,因此,我有一个名为cmd_t的typedef结构,其中有一个名为argv的字符数组成员。 我有一个函数,它接受一个字符数组参数,我希望它用一个与输入数组具有相同值的数组初始化结构,但是这个赋值需要我使用strdup来复制元素。到目前为止,我有这样的想法: typedef struct { char *argv[ARG_MAX+1]; //ARG_MAX being a defined constant ... } cmd_t; 我认为我的方法相当幼稚,如果我能得到一些指向正确方向的指

因此,我有一个名为cmd_t的typedef结构,其中有一个名为argv的字符数组成员。 我有一个函数,它接受一个字符数组参数,我希望它用一个与输入数组具有相同值的数组初始化结构,但是这个赋值需要我使用strdup来复制元素。到目前为止,我有这样的想法:

typedef struct {
  char  *argv[ARG_MAX+1]; //ARG_MAX being a defined constant
  ...
} cmd_t;
我认为我的方法相当幼稚,如果我能得到一些指向正确方向的指针,那就太棒了。

/*在这里声明为指针,但还没有指向有效的对象*/
cmd_t*cmd;
对于(int i=0;iargv[i]=strdup(argv[i]);
}
您可能想先初始化指向某个有效内存的cmd指针

cmd_t*cmd=malloc(sizeof(cmd_t));
cmd\u t*cmd=malloc(sizeof*cmd)是一个不错的选择。易于正确编码、检查和维护。
cmd_t *cmd_new(char *argv[]){
  cmd_t *cmd;
  for (int i = 0; i < ARG_MAX; i++){ //Last element must be NULL
    cmd->argv[i] = strdup(argv[i]);
  }
  ...
}
warning: ‘cmd’ may be used uninitialized in this function [-Wmaybe-uninitialized]
     cmd->argv[i] = strdup(argv[i]);