簡體   English   中英

更改const char指針的問題

[英]Problems with changing a const char pointer

我在更改char指針時遇到一些問題,無法弄清楚我要去哪里

這是我更改說明的功能...

void appointment::changeDescription(const char * s)   //  change an existing description
{

if (desc != NULL)
    strcpy(desc, s);

if (s == NULL)
    return;

}

這是調用更改描述功能的功能。

bool  keyBoardEnterAppointment( schedule & sched)  // return true if successful
// return false if full
{
    if (sched.isFull() == true)
    {
        cout << "Schedule is FULL." << endl;
        return false;
    }
    else
    {
    appointment s;
    int day, month, year;
    char *desc = new char;
    long source;

    cout << "*/Enter Appointment\\* ";
    cout << "Description: "; cin >> desc;
    cout << "Source: "; cin >> source;

    cout << "Month: "; cin >> month;
    cout << "Day: "; cin >> day;
    cout << "Year: "; cin >> year;

    s.changeDescription(desc);
    s.setSource(source);
    s.setDay(day);
    s.setMonth(month);
    s.setYear(year);
    sched.addtoSchedule(s);

    sched.print(cout);

    return true;
}

}

它可以編譯並運行,但其描述與默認構造函數描述相同。

如果您使用std::string將描述存儲在約會類中,則可以使您自己以及最終使用您的代碼的人變得更加輕松。 changeDescription方法將變為:

#include <string>

void appointment::changeDescription(std::string const& s){
    this->desc = s;
}

並將調用代碼更改為此:

std::string desc;

然后,幾乎所有免費的(導致編程困難的)錯誤修復導致您面臨問題的煩人的內存管理。 一般來說,與使用以空終止的C樣式char數組相比,這被認為是更好的慣用c ++代碼。

關於代碼的另一件事是,您真的應該在嘗試復制s之前(而不是之后)檢查s是否不為null。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM