用C++打印char*

The*_*use 2 c++ printing pointers char

我正在写一个简单的程序.里面只有一节课.有一个私人成员'char*号码'和两个功能(会有更多,但首先这些应该正常工作:)).

第一个应该将'source'复制到'number'变量中(我想这里的某个地方就是问题):

LongNumber::LongNumber(const char * source ){
        int digits = strlen(source);

        char* number = new char[digits+1];
        strcpy( number, source );
        //  cout<<number<<endl; - if the line is uncommented,
        //  the output is correct and there isn't a problem

}
Run Code Online (Sandbox Code Playgroud)

和打印功能:

void LongNumber::print(){
    cout<<number<<endl;
    // when I try to print with the same line of code here..it crashes
}
Run Code Online (Sandbox Code Playgroud)

当然,我错过了什么......但是什么?

(因为这是我的第一篇文章......你认为标签是否已经更正......你会如何标记帖子?)

先感谢您 :)

sta*_*tor 6

当您退出构造函数时,您的number char*数组将超出范围.当你到达print()时,由于程序不再能够访问*数字最初指向的内存,它会崩溃(即分段错误).要解决此问题,请执行以下操作:

class LongNumber
{
     char *number;
     LongNumber(const char *source);
     ~LongNumber();
     void print();
};

LongNumber::LongNumber(const char * source ){
        int digits = strlen(source);

        number = new char[digits+1];
        strcpy( number, source );    
}

void LongNumber::print(){
    cout<<number<<endl;
}
Run Code Online (Sandbox Code Playgroud)

不要忘记执行以下操作:

LongNumber::~LongNumber()
{
    delete [] number;    // to avoid memory leaks
}
Run Code Online (Sandbox Code Playgroud)

我还强烈建议使用STL :: string而不是使用char*作为你的*number变量,因为你不必自己处理内存管理开销,复制字符串也会更容易.


sth*_*sth 5

LongNumber构造函数中,您声明一个名为的新局部变量number,并使用新char数组对其进行初始化:

char* number = new char[digits+1];
Run Code Online (Sandbox Code Playgroud)

相反,你应该省略char*,以便它看起来不像一个新的变量声明并使用对象成员变量:

number = new char[digits+1];
Run Code Online (Sandbox Code Playgroud)

使用当前代码,成员变量number永远不会被初始化并在以后使用它print会导致错误.