gpt4 book ai didi

C - 将元素添加到结构指针

转载 作者:行者123 更新时间:2023-11-30 16:51:04 24 4
gpt4 key购买 nike

我试图将结构体歌曲添加到我的结构体指针歌曲*中,但是当尝试将其写入文件时,它只是给出了垃圾。这是我的功能:

void addSong(Song *song, char songName[], char artistName[], int publicationYear, int *nrOfSongs)
{
Song *tempSongs = (Song*)malloc(sizeof(Song)*(*nrOfSongs));

for (int i = 0; i < (*nrOfSongs); i++)
{
strcpy(tempSongs[i].artistName, song[i].artistName);
strcpy(tempSongs[i].songName, song[i].songName);
tempSongs[i].publicationYear = song[i].publicationYear;
}

free(song);
*nrOfSongs = (*nrOfSongs) + 1;
song = (Song*)malloc(sizeof(Song)*(*nrOfSongs));


for (int i = 0; i < ((*nrOfSongs)-1); i++)
{
strcpy(song[i].artistName, tempSongs[i].artistName);
strcpy(song[i].songName, tempSongs[i].songName);
song[i].publicationYear = tempSongs[i].publicationYear;
}
}

编辑1:抱歉这个问题不好。

我的函数writeToFile:

void writeToFile(char fileName[], Song *song, int *nrOfSongs)
{
char name[256];
snprintf(name, sizeof(name), "%s.txt", fileName);
FILE * file = fopen(name, "w");

fprintf(file, "%d", *nrOfSongs);
fputc('\n', file);

for (int i = 0; i < (*nrOfSongs); i++)
{
fputs(song[i].songName, file);
fputs(song[i].artistName, file);
fprintf(file, "%d", song[i].publicationYear);
fputc('\n', file);
}

fclose(file);
}

文件示例:

4
Mr Tambourine Man
Bob Dylan
1965
Dead Ringer for Love
Meat Loaf
1981
Euphoria
Loreen
2012
Love Me Now
John Legend
2016

我想添加一首歌曲,然后我想将 ArtistName、songName 和 PublicationYear 添加到我的结构指针,然后将结构指针写入新文件。

最佳答案

您应该使用 realloc() 扩大数组 song,而不是复制数组两次,然后向其中添加新元素,如下所示:

Song *addSong(Song *song, char songName[], char artistName[], int publicationYear, int *nrOfSongs) {
*nrOfSongs++;
song = realloc(song, *nrOfSongs * sizeof *song);
// Don't forget to do error checking here, realloc() may return NULL

strcpy(song[*nrOfSongs - 1].artistName, artistName);
// et cetera

return song;
}

因为您正在重新分配内存,所以指向数组的指针发生了变化,因此您必须将新指针返回给调用者,就像 @wildplasser 所说的那样。

此外,strcpy() 是一个不安全的函数。考虑使用更安全的替代方案,例如 snprintf()

关于C - 将元素添加到结构指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41910249/

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