返回cstring时返回垃圾值的程序

时间:2016-07-22 20:09:56

标签: c++ class c-strings

我的程序返回建模为c-strings的变量的垃圾值。该程序使用类来建模数据类型Song。设置变量时会出现错误 下面列出了对程序和输出的输入 我为代码的长度道歉。

为什么是随机值?

代码

#include <iostream>
#include <cstring>

using namespace std;

const int MAX_CHAR = 100;

class Song
{
public:
    //Default constructor
    Song();
    //Constructor
    Song(char title[], char artist[], char album[], int min, int sec);
   //Destructor
   ~Song();

   //Accessor functions
   char getTitle()const;
   char getArtist() const;
   char getAlbum() const;
   int getMin() const;
   int getSec() const;

   //Mutator functions
   void setTitle(const char*);
   void setArtist(const char*);
   void setAlbum(const char*);
   void setMin(int);
   void setSec(int);

private:
    //Member Variables
    char title[MAX_CHAR];
    char artist[MAX_CHAR];
    char album[MAX_CHAR];
    int min;
    int sec;
};

Song::Song(){}

Song::Song(char newTitle[],char newArtist[],char newAlbum[], int     newMin, int newSec)
{

    strncpy(title, newTitle, 100);
    strncpy(artist, newArtist, 100);
    strncpy (album, newAlbum, 100);
    min = newMin;
    sec = newSec;
}


Song::~Song(){}


//getter functions
char Song::getTitle() const
{
    return title[MAX_CHAR];
}

char Song::getArtist() const
{
    return artist[MAX_CHAR];
}

char Song::getAlbum() const
{
    return album[MAX_CHAR];
}

int Song::getMin() const
{
    return min;
}

int Song::getSec() const
{
    return sec;
}

//setter functions

void Song::setTitle(const char newTitle[])
{
    strcpy(title, newTitle);
}

void Song::setArtist(const char newArtist[])
{
    strcpy(artist, newArtist);
}

void Song::setAlbum(const char newAlbum[])
{
    strcpy(album, newAlbum);
}
void Song::setMin(int min)
{
    this->min = min;
}

void Song::setSec(int sec)
{
    this->sec = sec;
}

int main ()
{
    char newTitle[MAX_CHAR];
    char newArtist[MAX_CHAR];
    char newAlbum[MAX_CHAR];
    int min;
    int sec;

    cout << "Enter title: ";
    cin >> newTitle;
    cout << "Enter artist: ";
    cin >> newArtist;
    cout << "Enter album: ";
    cin >> newAlbum;
    cout << "Enter minutes: ";
    cin >> min;
    cout << "Enter seconds: ";
    cin >> sec;

    Song song;

    song.setTitle(newTitle);
    song.setArtist(newArtist);
    song.setAlbum(newAlbum);
    song.setMin(min);
    song.setSec(sec);

    cout << endl << "Title: " << song.getTitle() << endl <<
    "Artist: " << song.getArtist() << endl <<
    "Album: " << song.getAlbum() << endl <<
    "Minutes: " << song.getMin() << endl <<
    "Seconds: " << song.getSec() << endl;

    return 0;
}     

的I / O

一致返回的输入和错误值:

 //Inputs
    Enter title: title
    Enter artist: artist
    Enter album: album
    Enter minutes: 3
    Enter seconds: 20


    //Outputs
    Title: a
    Artist: a
    Album: 
    Minutes: 3
    Seconds: 20

1 个答案:

答案 0 :(得分:1)

问题出在你的getter成员函数中,你实际上返回的是一个字符,而不是数组。您需要进行以下更改:

52.x.x.x         ip-172-x-x-x.us-west-2.compute.internal