Как мне выделить структуру с данным массивом символов, используя strdup? - PullRequest
0 голосов
/ 20 февраля 2020

Итак, у меня есть структура typedef с именем cmd_t с элементом массива символов с именем 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]);

Я предполагаю, что мой подход довольно наивен, и если бы я мог получить несколько указателей в правильном направлении, это было бы великолепно.

1 Ответ

0 голосов
/ 20 февраля 2020
  /* 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));
...