gpt4 book ai didi

c - 使用字符串的链接列表

转载 作者:行者123 更新时间:2023-11-30 16:47:42 28 4
gpt4 key购买 nike

当我插入链接列表时出现段错误,但我找不到它。在某一时刻,它允许我插入最多三个节点,但现在它在第一次插入后出现段错误,并且不会迭代 while 循环和 for 语句。我是否错误地将信息扫描到阵列中?我必须能够接受多个输入值,因为最终我需要能够根据用户给出的字符串和计数值删除和打印节点。

用户的输入如下所示:

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");
}
}

最佳答案

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

temp->symbol=strdup(str);

关于c - 使用字符串的链接列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43235121/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com