Ошибка при записи ключа и строки в AddNode - C (СИ)
Формулировка задачи:
Не могу понять, почему AddNode фэйлится при записи туда ключа и строки.
Хочу сделать таблицу, чтобы убирало и добавляло элемент.
#include "stdio.h" #include "stdlib.h" typedef struct NODE { long long int key; char *string; }Node; typedef struct TABLE { int length; Node *node; }Table; Table * CreateTable() { Table *res=(Table *)malloc(sizeof(Table)); res->length=0; res->node=NULL; } void AddNode(Table *res) { long long int key; printf("Type your key:\n"); scanf("%d",&key); getchar(); printf("Type your string:\n"); char *string=(char *)malloc(sizeof(char)*100); gets(string); res->node=realloc(res->node,sizeof(Node)); res->length++; res->node[res->length-1].key=key; res->node[res->length-1].string=string; return; } void PrintTable(Table *res) { int i; for(i=0;i< res->length ;i++) { printf("%ld -> %s\n",res->node[i].key,res->node[i].string); } }
Решение задачи: «Ошибка при записи ключа и строки в AddNode»
textual
Листинг программы
#include "stdio.h" #include "stdlib.h" typedef struct NODE { long long int key; char *string; }Node; typedef struct TABLE { int length; Node *node; }Table; Table * CreateTable() { Table *res=(Table *)malloc(sizeof(Table)); res->length=0; res->node=NULL; } void AddNode(Table *res) { char *string=(char *)malloc(sizeof(char)*100); long long int key; printf("Type your key:\n"); scanf("%ld",&key); getchar(); printf("Type your string:\n"); fgets(string,98,stdin); res->node=realloc(res->node,sizeof(Node)); res->length++; res->node[res->length-1].key=key; res->node[res->length-1].string=string; return; } void PrintTable(Table *res) { int i; for(i=0;i< res->length ;i++) { printf("%ld -> ",res->node[i].key); printf("%s\n",res->node[i].string); } }
Объяснение кода листинга программы
- Код начинается с объявления двух структур:
NODE
иTABLE
. СтруктураNODE
содержит ключ типаlong long int
и строку типаchar *
. СтруктураTABLE
содержит переменную типаint
для хранения длины таблицы и указатель на первый элемент таблицы типаNode *
. - Создается функция
CreateTable
, которая выделяет память под структуруTABLE
и инициализирует ее поля. - Создается функция
AddNode
, которая добавляет новый узел в таблицу. В этой функции сначала запрашивается ключ и строка, затем выделяется память под новую строку. Затем изменяется указатель на первый элемент таблицы и увеличивается длина таблицы. Новый узел добавляется в таблицу. - Создается функция
PrintTable
, которая выводит все строки таблицы. В этой функции используется циклfor
, который проходит по всем элементам таблицы и выводит ключ и строку каждого элемента. - Код содержит две глобальные переменные:
table
иnode
. Эти переменные используются для демонстрации работы функцийCreateTable
иAddNode
. - Код содержит пример использования функций
CreateTable
иAddNode
. Сначала создается таблица, затем добавляются два узла. - Код содержит пример использования функции
PrintTable
. После вызова этой функции на экран должны быть выведены два узла таблицы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д