gpt4 book ai didi

c - 将单词保存到 C 中的链表的问题

转载 作者:太空宇宙 更新时间:2023-11-04 08:19:29 24 4
gpt4 key购买 nike

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

typedef struct node
{
int priorityc;
char *itemName;
struct node *next;
} node;
node *head;

void save();
void printcontents();
int search(char *itemName);
int serve(char *itemName);
void load();
void inserted();
void deleted(char *itemName);

int main()
{
load();
printcontents();
save();
}

void load()
{
head = NULL;
FILE *fp;
fp = fopen("California.txt", "r");
int tempPriority;
char tempName[200];

while(fscanf(fp, "%s %d", tempName, &tempPriority) == 2)
{
//The issue seems to arise somewhere in the remaining code of the load function
node *tempNode = (node *)malloc(sizeof(struct node));
tempNode->priorityc = tempPriority;
tempNode->itemName = tempName;
tempNode->next = head;
head = tempNode;
printf("%s\n", head->itemName);
}
fclose(fp);
printf("%s\n", head->itemName);
}

void printcontents()
{

node *current = head;
while(current != NULL)
{
printf("%s %d\n", current->itemName, current->priorityc);
current=current->next;
}
}

void save()
{
FILE *fp;
node *current = head;
fp = fopen("California.txt", "w");
while(current != NULL)
{
fprintf(fp, "%s %d\n", current->itemName, current->priorityc);
current=current->next;
}
fclose(fp);
}

输入文件又名 California.txt 是一个简单的记事本文件,包含以下信息。

Desktop-computer 100
Desktop-screen 100
Desktop-keyboard 100
TV-set 80
Audio-system 75
Bed 65
Night-table 65
Hibachi 35

在保存功能之后,所有数字都通过了,但以下是控制台打印的内容以及在 California.txt 文件中重写的内容。

{°@u&0@ 35
{°@u&0@ 65
{°@u&0@ 65
{°@u&0@ 75
{°@u&0@ 80
{°@u&0@ 100
{°@u&0@ 100
{°@u&0@ 100

我尝试将 char tempName(在加载中找到的字符串)制作成一个指针并运行该函数,但随后控制台打印出来并保存到加州文件。

Hibachi 35
Hibachi 65
Hibachi 65
Hibachi 75
Hibachi 80
Hibachi 100
Hibachi 100
Hibachi 100

我真的在这里遇到了死胡同,我不知道如何解决这个问题,任何建议都会有所帮助。如果它工作正常,它应该将以下内容打印到控制台。

Hibachi 35
Night-table 65
Bed 65
Audio-system 75
TV-set 80
Desktop-keyboard 100
Desktop-screen 100
Desktop-computer 100

最佳答案

您的节点通过指针存储名称

char *itemName;

但是在 load() 中,您不会为每个节点分配内存。您只需将它指向 tempName,这是一个局部变量,因此在函数的末尾您会得到一个悬空指针。您需要为每个 itemName 分配内存,然后使用诸如 strcpy 之类的函数将结果复制到其中。

另一种选择是使用固定长度的数组,例如

char itemName[80];

然后 strncpy进入其中。

关于c - 将单词保存到 C 中的链表的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34028368/

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