编译Linux / Unix问题C ++

时间:2015-11-03 01:18:46

标签: c++ linux unix

这只是整个程序的一部分,在Windows中编译并运行良好,但它不喜欢我在Linux / Unix中的strcpy。我做错了什么,我该如何解决?还有一个注释,我不允许使用字符串,只能使用cstring。

Song.cpp

#include "Song.h"


Song::Song()
{
}


Song::~Song()
{
}


Song::Song(char* title, char* artist, char* duration, char* album)
{
strcpy(this->title,50,title);
strcpy(this->artist, 50, artist);
strcpy(this->duration, 50, duration);
strcpy(this->album, 50, album);
}

void Song::setTitle(char* title)
{
this->title= title;
}
void Song::setArtist(char* artist)
{
this->artist = artist;
}
void Song::setDuration(char* duration)
{
this->duration= duration;
}
void Song::setAlbum(char* album)
{
this->album= album;
}

char* Song::getTitle()
{
return this->title;
}
char* Song::getArtist()
{
return this->artist;
}
char* Song::getDuration()
{
return this->duration;
}
char* Song::getAlbum()
{
return this->album;
}

Song.h

#include <iostream>
#include <iomanip>
#include <fstream>
#include <cstring>
#include <cctype>

using namespace std;

class Song
{
private:
    char* title;
    char* artist;
    char* duration;
    char* album;

public:
    Song();
    ~Song();

    Song(char* title, char* artist, char* duration, char* album);

    void setTitle(char* title);
    void setArtist(char* artist);
    void setDuration(char* duration);
    void setAlbum(char* album);

    char* getTitle();
    char* getArtist();
    char* getDuration();
    char* getAlbum();


};

1 个答案:

答案 0 :(得分:0)

您尚未为strcpy分配任何内存以进行复制。因此,构造函数会调用未定义的行为。

您需要先分配一个字符数组。但是,您还需要在每个安装者中解除分配。否则内存将被泄露,因为你正在重新分配管理它的指针。