在链表c中插入字符串



我正在编写一个程序,该程序将向列表中添加字符串并打印它(添加循环并按函数打印),但当然会出现问题。这个程序正在添加数据,但当我写"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("%sn",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;
}

你不能分配给数组,试试这个

strcpy(new->ch, ch);

而不是

new->ch = ch;
  1. 您应该使用scanf("%s",ch);而不是scanf("%s",&ch);,因为chchar array
  2. 此外,您应该使用strcmp而不是while(ch!='0'),因为ch也是char array,而不是普通字符

相关内容

  • 没有找到相关文章

最新更新