gpt4 book ai didi

c - 使用嵌套结构写入链表

转载 作者:太空宇宙 更新时间:2023-11-04 07:11:04 25 4
gpt4 key购买 nike

我正在尝试编写一个函数,该函数可以将文件中的一些信息读取到双向链表中的节点中。每个节点数据的格式如下。

结构(命名记录)
艺术家
专辑
歌曲
流派
songLength(这是另一个包含分钟和秒的结构)
播放次数
评分

void load(FILE *file, Node *head)
{
char tempArtist='\0', tempAlbum='\0', tempTitle='\0', tempGenre='\0'
,tempSpace='\0',tempMins='\0',tempSecs='\0';
SongLength *tempLength=NULL;
int tempPlay=0, tempRating=0,test=0;
tempLength = (SongLength*)malloc(sizeof(SongLength));

fscanf(file,"%s",&tempArtist);
fscanf(file,"%s",&tempAlbum);
fscanf(file,"%s",&tempTitle);
fscanf(file,"%s",&tempGenre);
fscanf(file,"%s",&tempMins);
fscanf(file,"%s",&tempSecs);
fscanf(file,"%s",&tempPlay);
fscanf(file,"%s",&tempRating);
fscanf(file,"%s",&tempSpace);

tempLength->mins=tempMins;
tempLength->secs=tempSecs;

head->data->album=tempAlbum; // breaks here
head->data->artist=tempArtist;
head->data->genre=tempGenre;
head->data->song=tempTitle;
head->data->length=tempLength;
head->data->played=tempPlay;
head->data->rating=tempRating;

}

这是我当前的加载函数。当尝试将这些值存储到节点数据中时,我遇到了访问冲突。

这是我的结构,便于复制

typedef struct songlength
{
int mins;
int secs;
}SongLength;


typedef struct record
{
char artist;
char album;
char song;
char genre;
struct songlength *length;
int played;
int rating;

}Record;

typedef struct node
{
struct node *pPrev;
struct node *pNext;
struct record *data;

}Node;

制作节点

Node *makeNode(Record *newData)
{
Node *temp = NULL;

temp=(Node*)malloc(sizeof(Node));

temp->data=newData;
temp->pNext=NULL;

return temp;
}

如果出现任何混淆,请告诉我!这也是我第一次使用动态内存,所以要温和 :P

谢谢!

最佳答案

这些行不对。

fscanf(file,"%s",&tempArtist);
fscanf(file,"%s",&tempAlbum);
fscanf(file,"%s",&tempTitle);
fscanf(file,"%s",&tempGenre);
fscanf(file,"%s",&tempMins);
fscanf(file,"%s",&tempSecs);
fscanf(file,"%s",&tempPlay);
fscanf(file,"%s",&tempRating);
fscanf(file,"%s",&tempSpace);

由于变量的定义方式,它们肯定会导致未定义的行为。

你不能指望

char c = '\0';
fscanf(file, "%s", &c);

工作。 &c 处没有足够的内存来读取字符串。你需要这样的东西:

char s[100]; // Or some size that is large enough to hold the data
// you are about to read.
fscanf(file, "%99s", s); // Make sure that you don't read more than 99
// characters. Leave at least one character
// for the terminating null character.

我希望这能为您提供有关如何更改变量的足够线索。

关于c - 使用嵌套结构写入链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28379926/

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