我刚刚开始学习c,我想创建自己的库来使用链接列表,目前我只需要它来处理字符串,但我无法让它工作。我得到一个分段错误,我知道这可能是一个愚蠢的错误,但我找不到它,有人可以帮助我吗?
这是头文件
#ifndef LIST_H
#define LIST_H
// node structure
typedef struct _node
{
char *data;
struct _node *next;
} node;
void append(node *head, char* strd);
void insert(node *head, char* strd);
void del(node *head, char* strd);
void display(node *head);
int lenght(node *head);
int search(node *head, char* strd);
void freel(node *head);
#endif
这是.c文件
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "list.h"
void append(node *head, char* strd)
{
node *temp, *aux;
temp = malloc(sizeof(node));
temp->data = malloc(strlen(strd) + 1);
strcpy(temp->data, strd);
aux = head;
while(aux->next != NULL)
aux = aux->next;
aux->next = temp;
temp->next = NULL;
}
void insert(node *head, char* strd)
{
node *temp;
temp = malloc(sizeof(node));
temp->data = malloc(strlen(strd) + 1);
strcpy(temp->data, strd);
if(head == NULL)
{
head = temp;
temp->next = NULL;
}
else
{
temp->next = head;
head = temp;
}
}
void del(node *head, char* strd)
{
node *temp, *aux;
temp = head;
while(temp != NULL)
{
if(strcmp(temp->data, strd) == 0)
{
if(head == temp)
{
head = temp->next;
free(temp->data);
free(temp);
}
else
{
aux->next = temp->next;
free(temp->data);
free(temp);
}
}
else
{
aux = temp;
temp = temp->next;
}
}
}
void display(node *head)
{
node *aux;
aux = head;
while(aux != NULL)
{
printf("%s ", aux->data);
aux = aux->next;
}
printf("\n");
}
int lenght(node *head)
{
int c = 0;
node *aux;
aux = head;
while(aux != NULL)
{
aux = aux->next;
c++;
}
return c;
}
int search(node *head, char* strd)
{
node *aux;
aux = head;
while(aux != NULL)
{
if(strcmp(aux->data, strd) == 0)
{
return 1;
}
}
return 0;
}
void freel(node *head)
{
node *aux, *prev;
aux = head;
prev = aux;
while(aux != NULL)
{
aux = aux->next;
free(prev->data);
free(prev);
prev = aux;
}
}
我用它来测试库
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "list.h"
int main(void)
{
char *str = "testing";
char *str2 = "hello";
char name[50];
printf("what's your name: ");
scanf("%49s",name);
node *head;
head = NULL;
insert(head, str);
append(head, str2);
append(head, name);
display(head);
freel(head);
return 0;
}
答案 0 :(得分:3)
head
始终为NULL
,因为您从不为其分配任何其他内容。 insert
中的分配是指具有相同名称的其他变量。