【问题标题】:How do I allocate a struct with a given char array using strdup?如何使用 strdup 分配具有给定 char 数组的结构?
【发布时间】:2020-02-20 04:49:02
【问题描述】:

所以我有一个名为 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]);

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

【问题讨论】:

    标签: c arrays struct initialization


    【解决方案1】:
      /* 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));
    

    【讨论】:

    • cmd_t *cmd = malloc(sizeof *cmd); 是一个不错的选择。更容易正确编码、审查和维护。
    猜你喜欢
    • 2015-10-26
    • 2020-10-03
    • 2012-01-01
    • 2013-07-27
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    相关资源
    最近更新 更多