在链表c中插入字符串

时间:2016-01-06 21:16:54

标签: c string linked-list

我正在编写一个程序,它将字符串添加到列表并打印它(添加循环和按功能打印)但当然出了问题。这个程序正在添加数据,但是当我写“#39; 0'这意味着停止添加,它不想停止。我认为我在add_to_list函数中分配内存时做的很糟糕。我查看了一些主题,但我没有线索应该看起来如何。如果有人告诉我这有什么问题,我会很高兴。 :)有代码:

#include <stdio.h>
#include <stdlib.h>
#define MAX_L 30

typedef struct elem{
    char ch[MAX_L];
    struct elem *next;
    struct elem *prev;
}   list_elem;

void add_to_list (list_elem *first, char ch[MAX_L])
{
    list_elem *new=(list_elem*)malloc(sizeof(list_elem));
    new->ch[MAX_L]=ch;
    list_elem *tmp=first;
    while (tmp->next!=NULL){
        tmp=tmp->next;}
    tmp->next=new;
    new->prev=tmp;
    new->next=NULL;

}


void print_list(list_elem *first)
{
    first=first->next;
    if(first->ch==NULL)
    printf("lista jest pusta!!\n");
    while(first->next!=NULL){
    printf("%s\n",first->ch);
    first=first->next;}

}

int main()
{


    list_elem *first=(list_elem*)calloc(1,sizeof(list_elem));
    first->prev=NULL;
    first->next=NULL;

    char a;
    char ch[MAX_L];
    printf("write ' 0 ' to end program.\n");
    printf("write smth to add it to list: \n");
    while(ch!='0'){
        scanf("%s",&ch);
        add_to_list(first,ch);}
    print_list(first);
    return 0;
}

2 个答案:

答案 0 :(得分:0)

您无法分配数组,请尝试这样

strcpy(new->ch, ch);

而不是

new->ch = ch;

答案 1 :(得分:0)

  1. scanf("%s",&ch);取代scanf("%s",ch);ch取代char arraywhile(ch!='0')
  2. 另外strcmp代替chchar array再次使用brew install openssl CONFIGURE_OPTS=--with-openssl-dir=$(brew --prefix openssl) rbenv install whatever-ruby-version List<Tuple<double,double>>,而不是普通角色。