通过多个方法传递 char* 最终不起作用

Passing char* through several methods doesn't work at the end

本文关键字:char 不起作用 方法      更新时间:2023-10-16

我在获得类成员的值后遇到了问题:

bool ModeData::setPasswd(char* _pass)
{
    return (this->setString(this->passwd_, _pass) ? true : false);
}
bool ModeData::setOutput(char* _out)
{
    return (this->setString(this->output_, _out) ? true : false);
}

其中setString如下:

bool ModeData::setString(char* _toStr, char* _fromStr)
{
    // check if already exists and delete
    this->delIfPresent(_toStr);
    // allocate space for the new string
    _toStr = new char[strlen(_fromStr) + 1];
    // copy new string
    if(strcpy(_toStr, _fromStr))
    {
        return true;
    }
    // if something gone wrong return 'false'
    return false;
}

然后如果我想打印this->passwd_的值,我什么也得不到。我认为指针在传递方法时丢失了,但我不确定。

你应该通过ref…不,不!等一下。你应该而不是使用指针,你应该使用std::string代替!这会让你的生活轻松很多。

也就是说,如果你真的想要使用指针,那么问题就在于你是按值传递它们。一旦函数返回,调用者将看不到对这些指针所做的更改(特别是_toStr = new char[strlen(_fromStr) + 1];中的赋值),并且作为副作用,您的程序正在泄漏内存。 要解决这个问题,通过引用传递指针:
    bool ModeData::setString(char*& _toStr, char*& _fromStr)
//                                ^              ^

并且不要忘记用new[]分配delete[]数组,否则您将有内存泄漏。但是让我再给你一次建议:使用std::string而不是通过原始指针进行手动内存管理。