Ваш текущий код просто копирует адрес одной строки (заданный параметр) в другую (элемент данных 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);
Не стесняйтесь просить дальнейших разъяснений / объяснений.