c++ - 更改 const char 指针的问题

标签 c++ pointers char

我在更改 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 风格字符数组更好的惯用 C++ 代码。

关于您的代码的另一件事是,您真的应该在尝试复制之前检查 s 是否为空,而不是之后。

关于c++ - 更改 const char 指针的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27096311/

相关文章:

c++ - 重复宏 n 次

C、使用Pointers扫描打印Matrix

c - 从函数返回 this 指针

java - 获取 char 和 int 输入

c++ - Char 2D Array 分别对待字符

c++ - 如何将字符空间动态分配给结构字段

c++ - C++ 内联函数的定义必须在同一个文件中吗?

c++ - 将有符号整数范围映射到无符号

c - C strcpy 和 strncpy 组合中的意外结果

c++ - 错误没有命名类型