我需要将消息的每个字符插入到链接列表中,但我不明白哪里出错了
我分配正确,但在打印消息时出现错误
有人可以帮助我吗?
作为结构
struct mensagem{
char msg;
char chave;
};
struct elemento{
struct mensagem dados;
struct elemento *prox;
};
typedef struct elemento* Lista;
typedef struct elemento Elem;
功能 - 构建列表、插入元素和打印列表
Lista* cria_lista(){
Lista* li = (Lista*) malloc(sizeof(Lista));
if(li != NULL)
*li = NULL;
return li;
}
int insere_lista_final(Lista* li, struct mensagem al){
if(li == NULL)
return 0;
Elem *no;
no = (Elem*) malloc(sizeof(Elem));
if(no == NULL)
return 0;
no->dados = al;
no->prox = NULL;
if((*li) == NULL){//lista vazia: insere início
*li = no;
}else{
Elem *aux;
aux = *li;
while(aux->prox != NULL){
aux = aux->prox;
}
aux->prox = no;
}
return 1;
}
void imprime_lista(Lista* li){
if(li == NULL)
return 0;
Elem* no = *li;
while(no != NULL){
printf("%c1",no->dados.msg);
no = no->prox;
}
}
内部主函数
int main()
{
int mod_exec=1,i=0;
char c;
struct mensagem al;
Lista* li = cria_lista();
while((c = getchar()) != '\n')
{
insere_lista_final(li,al);
imprime_lista(li);
}
return 0 ;
}
typedef struct elemento* Lista;
typedef struct elemento Elem;
Lista* cria_lista(){
Lista* li = (Lista*) malloc(sizeof(Lista));
if(li != NULL)
*li = NULL;
return li;
}
int insere_lista_final(Lista* li, struct mensagem al){
if(li == NULL)
return 0;
Elem *no;
no = (Elem*) malloc(sizeof(Elem));
if(no == NULL)
return 0;
no->dados = al;
no->prox = NULL;
if((*li) == NULL){//lista vazia: insere início
*li = no;
}else{
Elem *aux;
aux = *li;
while(aux->prox != NULL){
aux = aux->prox;
}
aux->prox = no;
}
return 1;
}
void imprime_lista(Lista* li){
if(li == NULL)
return 0;
Elem* no = *li;
while(no != NULL){
printf("%c1",no->dados.msg);
no = no->prox;
}
}
内部主函数
int main()
{
int mod_exec=1,i=0;
char c;
struct mensagem al;
Lista* li = cria_lista();
while((c = getchar()) != '\n')
{
insere_lista_final(li,al);
imprime_lista(li);
}
return 0 ;
}
最佳答案
添加具有正确初始化变量的 main
函数并没有导致我出错:
int main(void)
{
Lista *l = cria_lista();
struct mensagem m1 = { .msg = 'a', .chave = 'b'};
struct mensagem m2 = { .msg = 'c', .chave = 'd'};
insere_lista_final(l,m1);
insere_lista_final(l,m2);
imprime_lista(l);
return 0;
}
确保编译时触发警告标记。
关于c - 在链接列表中输入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57712137/