Reputation: 137
My program is returning garbage values for variables modeled as c-strings. The program uses a class to model datatype Song. It appears the error would occur when the variable is set.
Inputs to the program and the outputs are listed below.
My apologies for the length of the code.
Why the random values?
#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;
}
The inputs and the erroneous values that are consistently returned:
//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
Upvotes: 1
Views: 172
Reputation: 4333
The problem is in your getter member functions where you actually return a character and not the array. You need to do the following changes:
const char* getTitle() const;
const char* getArtist() const;
const char* getAlbum() const;
const char* Song::getTitle() const {
return title;
}
const char* Song::getArtist() const {
return artist;
}
const char* Song::getAlbum() const {
return album;
}
Upvotes: 1