当我插入链接列表时,我得到一个段错误,但我找不到它。有一次,它允许我插入最多三个节点,但现在它在第一次插入后会发生段错误,并且不会迭代while循环和语句。我是否错误地将信息扫描到阵列中?我必须能够接收几个输入值,因为最终我需要能够根据用户给出的字符串和计数值删除和打印节点。
来自用户的输入如下所示:
ins books
ins table
prl // to print list
del v1 v5 //to delete nodes with count values that fall between 1 and 5
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node
{
char *symbol;// each Node contains a array 'symbol'
int count; // each Node contains a symbol counter
struct node *next;
};// end struct
void insert(struct node**,struct node **, char *str);
void printL(struct node *);
int main()
{
struct node *head;
struct node *tail;
head = NULL;
tail = NULL;
//Declare variables needed for input and output
char input[15]={0};
char cmd [4]={0};
char info[11] = {0};
int *val={0};
//possible command strings
char ins[]= "ins";
char prl[]= "prl";
char end[]= "end";
// Prompt user for command and corresponding input
puts("Please enter a command with corresponding value(s) where necessary");
scanf("%s%s%s", cmd,info, val);
//While command is not 'end':
while (strcmp(end,cmd) != 0){
// Read value(s) for the command, in necessary
if (strcmp(ins,cmd)==0)
{
insert(&head, &tail, info);
}
if (strcmp(prl, cmd)==0)
{
printL(head);
}
puts("Please enter your next command and value where necessary:");
scanf("%s%s%s", cmd,info, val);
}
return 0;
}
void insert(struct node **h, struct node **t, char * str)
{
struct node *temp;
if ((temp=(struct node *)malloc(sizeof(struct node)))==NULL)
{
printf("Memory allocation or node failed.\n");
exit(1);
}
strcpy(temp->symbol,str);
temp->count= 1;
temp->next=NULL;
if(*h == NULL)
{
*h=*t=temp;
}
else
{
(*t)->next = temp;
*t = (*t)->next;
}
}
void printL(struct node *h)
{
// NodePtr hPtr = NULL;
//hPtr=malloc(sizeof(Node));
//hPtr=head;
if(h == NULL){
puts("The list is empty");
}
else{
while(h != NULL){
printf("%s", h->symbol);
printf("\t %d", h->count);
h= h->next;
}
printf("\n");
}
}
答案 0 :(得分:0)
Tom hasOwner Mammy
您需要为if ((temp=(struct node *)malloc(sizeof(struct node)))==NULL)
{
printf("Memory allocation or node failed.\n");
exit(1);
}
strcpy(temp->symbol,str);
分配内存。复制现有字符串以来最简单的方法是使用temp->symbol
这样的代替strdup
strcpy
答案 1 :(得分:0)
您还需要为变量符号分配内存。 使插入功能如下:
void insert(struct node **h, struct node **t, char * str)
{
struct node *temp;
if ((temp=(struct node *)malloc(sizeof(struct node)))==NULL)
{
printf("Memory allocation or node failed.\n");
exit(1);
}
int count = 0;
count=strlen(str);
temp->symbol=malloc(count+1);
strcpy(temp->symbol,str);
temp->count= 1;
temp->next=NULL;
if(*h == NULL)
{
*h=*t=temp;
}
else
{
(*t)->next = temp;
*t = (*t)->next;
}
}