2016-07-22 18 views
1

Mein Programm gibt Garbage-Werte für Variablen zurück, die als C-Strings modelliert sind. Das Programm verwendet eine Klasse, um den Datentyp Song zu modellieren. Es scheint, dass der Fehler auftreten würde, wenn die Variable gesetzt ist.
Die Eingänge für das Programm und die Ausgänge sind unten aufgeführt.
Ich entschuldige mich für die Länge des Codes.Programm zurückgeben von Garbage-Werten beim Zurückkehren von cstring

Warum die Zufallswerte?

-Code

#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

Die Eingänge und die fehlerhaften Werte, die konsequent zurückgeführt werden:

//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 
+0

Was sehen Sie beim Debuggen? Könnten Sie bitte einen [MCVE] bereitstellen, damit wir Ihnen helfen können? –

+1

Verwenden Sie einfach std :: string und entfernen Sie alle Arrays. –

+1

'return title [MAX_CHAR];' - Erkläre, was du denkst. – PaulMcKenzie

Antwort

1

Das Problem ist in Ihren Getter Member-Funktionen, wo man tatsächlich eine Rückkehr Zeichen und nicht das Array. Sie müssen die folgenden Änderungen vornehmen:

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; 
} 
+0

Problem behoben! Vielen Dank – 0x1000001