我正在编写一个程序,该程序将向列表中添加字符串并打印它(添加循环并按函数打印),但当然会出现问题。这个程序正在添加数据,但当我写"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;
- 您应该使用
scanf("%s",ch);
而不是scanf("%s",&ch);
,因为ch
是char array
- 此外,您应该使用
strcmp
而不是while(ch!='0')
,因为ch
也是char array
,而不是普通字符