Char Двусвязный список

Я создал структуру и функцию для двусвязного списка. Он безупречно работает с целыми числами, но теперь мне нужно преобразовать его для использования символов. У меня всегда были проблемы с персонажами, также когда я добавляю персонажа, я получаю постоянный цикл.

Пока у меня есть:

 struct node
{
      struct node *previous;
      char data;
      struct node *next;
}*head, *last; 

 void begin(char value)
 {
     struct node *temp;
 char *var=(char *)malloc(sizeof(char)*100);
 var->data=value;
 if(head==NULL)
 {
     head=var;
     head->previous=NULL;
     head->next=NULL;
     last=head;
 }
 else
 {
     temp=var;
     temp->previous=NULL;
     temp->next=head;
     head->previous=temp;
     head=temp;
 }
} 

Я использовал несколько примеров из моей предыдущей функции push/pop, в которой использовались символы, но я не уверен, что делаю неправильно.

Редактировать: забыл поместить ошибки> null.c:14: ошибка: запрос для члена `data' в чем-то, что не является структурой или объединением null.c:17: предупреждение: назначение из несовместимого типа указателя


person Hamas4    schedule 09.05.2013    source источник
comment
Вы хотите, чтобы размер данных был 1 символ, или вы пытаетесь сделать строки данных длиной 100?   -  person burtmacklin16    schedule 09.05.2013
comment
Мое меню сделано так, что в основном предполагается добавить «a» в начале, добавить «b», добавить «c» в конце, вставить перед «c» как «d» и отобразить. Итак, всего 1 символ, но посмотрите на сообщение ниже, оно исправило ошибки, но не вернуло «а»   -  person Hamas4    schedule 09.05.2013


Ответы (3)


char *var=(char *)malloc(sizeof(char)*100);

Это должно быть,

struct node *var= malloc( sizeof( struct node ) );
person VoidPointer    schedule 09.05.2013
comment
Спасибо, но теперь, когда я ввожу «а», возвращается 97, а не «а». - person Hamas4; 09.05.2013
comment
Ну да. 'a' — это целое число со значением 97. Если вы пытаетесь напечатать его как символ, спецификатор формата — %c, а не %d. - person This isn't my real name; 09.05.2013

Это правильно... тип var не является "структурным узлом", поэтому вы не можете использовать var->data.

person Salvatore    schedule 09.05.2013

Просто небольшой вопрос: вы пытаетесь составить список данных с одним символом или идея состоит в том, чтобы составить список строк (более одного символа в каждом элементе)?

Я спрашиваю, потому что "malloc(sizeof(char)*100);" создайте впечатление, что вы пытаетесь сохранить строку длиной 100 байт, но функция получает только один символ. (-:

person PerryWerneck    schedule 09.05.2013
comment
Нет, только один, и я понял это с помощью свыше. - person Hamas4; 10.05.2013