Есть ли способ передать это значение моему узлу? - PullRequest
1 голос
/ 09 ноября 2019

У меня есть школьный проект, в котором мне нужно создать двусвязный список.

В одной из моих функций я хочу создать новый узел и добавить к нему значение, но он не работает.

Имя функции и параметры не могут быть изменены, и мне нужно поместить эту объявленную const строку в неконстантную объявленную строку.

static struct node *make_node(const char *value)
{
  struct node *node;
  node = malloc(sizeof(node));
  node->value = value;

  return node;
}

Я получаю сообщение об ошибке:

предупреждение: присваивание отбрасывает квалификатор 'const' из целевого типа указателя [-Wdiscarded-qualifiers]

1 Ответ

1 голос
/ 09 ноября 2019

Ваш текущий код просто копирует адрес одной строки (заданный параметр) в другую (элемент данных struct). Вот почему компилятор генерирует предупреждение: значение параметра указывает на строку, которую нельзя изменить;значение "struct" указывает на то, что можно изменить.

Чтобы скопировать фактические строковые данные , вам сначала нужно выделить достаточно памяти для хранения строковых данных, а затем скопироватьданные к нему:

static struct node *make_node(const char *value)
{
    struct node *node;
    node = malloc(sizeof(node));
    node->value = malloc(strlen(value) + 1); // Add 1 to accommodate the nul-terminator
    strcpy(node->value, value);
//  node->value = value;
    return node;
}

В качестве альтернативы, вы можете использовать функцию strdup (это сделает выделение и копирование за вас):

node->value = strdup(value);

Не стесняйтесь просить дальнейших разъяснений / объяснений.

...