私は構造体のソングに構造体のソングを追加しようとしていますが、ファイルに書き込もうとしたときにジャンクを出してしまいます。C - 構造体ポインタに要素を追加する
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:悪い質問には申し訳ありません これは私の関数です。
My機能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を追加したいですポインタを作成し、構造体ポインタを新しいファイルに書き込みます。
この関数がvoidを返す理由はありません。代りに割り当てられた構造体へのポインタを返してください。 – wildplasser
重要な部分の大部分が欠落しています。あなたはファイルへの書き込みについて何も表示しません。あなたはどのようにあなたの機能を呼びますか?どのようにファイルに書き込むのですか?あなたは何を書いていると思いますか?ファイルには何が入っていますか?何が書かれたかをどうやって確認するのですか? – Gerhardh
さらに[mcve]が必要です。 – melpomene