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

How do I allocate a struct with a given char array using strdup?

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

typedef struct {
  char  *argv[ARG_MAX+1]; //ARG_MAX being a defined constant
  ...
} cmd_t;
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]);

我认为我的方法相当幼稚,如果我能得到一些正确方向的指示,那就太好了。

  /* declared here as a pointer, but is not yet pointing to a valid object */
  cmd_t *cmd; 
  for (int i = 0; i < ARGMAX; i++){

    /* cmd has not yet been initialised. It's pointing at garbage! */
    cmd->argv[i] = strdup(argv[i]); 
  }

您可能希望先将 cmd 指针初始化为某个有效内存...

  cmd_t *cmd = malloc(sizeof(cmd_t));