从char数组打印出更多值,然后再打印它';我们该怎么办?

从char数组打印出更多值,然后再打印它';我们该怎么办?,c,function,pointers,struct,C,Function,Pointers,Struct,我目前正在开发一个程序,可以从文本文件中读取信息。文本文件包含一个歌曲列表,我已经创建了一个结构,它应该能够在我的程序中保存歌曲列表中的每首歌曲 我把程序分成了不同的文件,它们看起来像这样 main.c #include "FuncDek.h" #include <locale.h> #include <crtdbg.h> int main() { //For swedish and check memory leak _CrtSetDbgFlag(_CRTDBG_AL

我目前正在开发一个程序,可以从文本文件中读取信息。文本文件包含一个歌曲列表,我已经创建了一个结构,它应该能够在我的程序中保存歌曲列表中的每首歌曲

我把程序分成了不同的文件,它们看起来像这样

main.c

#include "FuncDek.h"
#include <locale.h>
#include <crtdbg.h>
int main()
{

//For swedish and check memory leak
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
setlocale(LC_ALL, "swedish");

//Create with starting size of 5
Song *ptr = (Song *)malloc(sizeof(Song) * 4);

int menuChoice = 0;
int nrOfSongs = 0;

//Read from file
readFromFile(ptr, &nrOfSongs);
system("pause");

do
{
    system("cls");
    menuChoice = menu();

    switch (menuChoice)
    {
    case 1: 
        addSong(ptr, &nrOfSongs);
        break;
    case 2:
        showList(ptr, nrOfSongs);
        break;
    case 0:
        break;
    default:
        printf("\nFelaktigt val, försök igen\n");
        system("pause");
        break;
    }

} while (menuChoice != 0);

free(ptr);

system("pause");
return 0;
}
#包括“fundek.h”
#包括
#包括
int main()
{
//用于检查和检查内存泄漏
_CRTSETDBG标志(_CRTDBG_ALLOC_MEM_DF|u CRTDBG_LEAK_CHECK_DF);
setlocale(LC_ALL,“瑞典语”);
//创建的起始大小为5
Song*ptr=(Song*)malloc(sizeof(Song)*4);
int menuChoice=0;
int nrOfSongs=0;
//从文件中读取
readFromFile(ptr和nrOfSongs);
系统(“暂停”);
做
{
系统(“cls”);
menuChoice=菜单();
开关(menuChoice)
{
案例1:
addSong(ptr和nrOfSongs);
打破
案例2:
展示名单(ptr、nrOfSongs);
打破
案例0:
打破
违约:
printf(“\nFelaktigt val,försök igen\n”);
系统(“暂停”);
打破
}
}while(menuChoice!=0);
免费(ptr);
系统(“暂停”);
返回0;
}
FuncDek.h

#ifndef FUNCDEK
#define FUNCDEK

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

typedef struct {
    char title[25];
    char artist[25];
    char year[4];

} Song;

int menu();
void addSong(Song *ptr, int *nrOfSongs);
void showList(Song *ptr, int nrOfSongs);
void readFromFile(Song *ptr, int *nrOfSongs);

#endif
#ifndef functdek
#定义FUNCDEK
#包括
#包括
#包括
类型定义结构{
字符标题[25];
炭艺术家[25];
焦年[4];
}歌曲;
int菜单();
void addSong(歌曲*ptr,int*nrOfSongs);
无效播放列表(歌曲*ptr,国际歌曲);
void readFromFile(歌曲*ptr,int*nrOfSongs);
#恩迪夫
最后是fundek.c

#include "FuncDek.h"
#pragma warning(disable: 4996)


//Print all from list
void showList(Song *ptr, int nrOfSongs)
{
    system("cls");
    printf("Låtlista\n");
    printf("-------------------------------\n");
    for (int i = 0; i < nrOfSongs; i++)
    {       
        printf("Title: %s", ptr[i].title);
        printf("Artist: %s", ptr[i].artist);
        printf("År: %s \n\n", ptr[i].year);

    }
    system("pause");
}


//Read from file
void readFromFile(Song *ptr, int *nrOfSongs)
{
    FILE *fileOpen;

    fileOpen = fopen("song.txt", "r+");
    if (fileOpen == NULL)
    {
        printf("Something went wrong. Could't open file\n");
    }

    char line[100];
    int counter = 0;
    int nrOfSongsInList = 0;

    /*Read all information to line*/
    while (fgets(line, sizeof(line), fileOpen) != NULL)
    {
        if (counter == 0)
        {
            nrOfSongsInList = line[0] - '0';
            counter++;
        }
        else if (counter % 2 == 1 && counter == 1)
        {
            strcpy(ptr[*nrOfSongs].title, line);
            counter++;
        }

        else if (counter % 2 == 0)
        {
            strcpy(ptr[*nrOfSongs].artist, line);
            counter++;
        }

        else if (counter % 3 == 0)
        {   
            strcpy(ptr[*nrOfSongs].year, line);
            counter = 1;
            *nrOfSongs += 1;
        }

    }

    fclose(fileOpen);
}
#包括“fundek.h”
#杂注警告(禁用:4996)
//打印列表中的所有内容
无效播放列表(歌曲*ptr,国际歌曲)
{
系统(“cls”);
printf(“Låtlista\n”);
printf(“------------------------------------\n”);
对于(int i=0;i
我现在可以读取我的文本文件并将我的歌曲存储在我的stong结构中,我已经为它分配了内存。 我的问题发生在我尝试使用showList函数时。我可以打印出ptr[I]。艺术家和ptr[I]。标题正确,但出于某种原因,当我打印ptr[I]时。年份将显示年份+列表中下一首歌曲的标题

我的文本文件如下所示,每行都以“\n”结尾

四, 手鼓先生 鲍勃·迪伦 1965 爱的死铃声 瑞士肉包 1981 兴奋 洛伦 2012 现在爱我 约翰传奇 2016年

我不明白为什么打印出来的时间超过了一年。我注意到,如果我将结构中的year数组设置为与其他2个数组相同的大小,问题就会消失。但我想了解

当我在VS中调试时,它说它在arr年存储了正确的值。
有人知道我可能错过了什么吗?

啊,谢谢,我根本没想过!