C ++指针在使用之前要被引用

时间:2014-08-28 06:10:20

标签: c++ pointers

说我已经定义了类中的变量

const char* info;


bool machine::ping(){
     if(info[0] == '\0' ){
        printf("%s", "null");
     }
     else{
        printf("%s",info); <---------- This does NOT print out what I expect. :(
     }
}

bool machine::RecvNotify(const Data& aData){
     info = aData.path();
     printf("%s",info);  <------- This works well and prints out what I expect
}

我想我不能用这种方式定义这个变量。如果有什么我应该改变,请告诉我。感谢

2 个答案:

答案 0 :(得分:1)

变量很好,但aData.path可能只返回一个临时字符串,具体取决于实现。

如果您将const char* info更改为std::string会怎样?

答案 1 :(得分:0)

有两件事。

首先,&#34; machine :: RecvNotify()&#34;应该在&#34; machine :: ping()&#34; 之前调用。这是为了给&#34; info&#34;一个指向的地址。

其次,在&#34; machine :: RecvNotify()&#34;中,是&#34; aData&#34;当你调用&#34; machine :: ping()&#34;时仍然在范围。如果没有,&#34; info&#34;当你打电话给#34; machine :: ping()&#34;时会有无效的地址指向。这可能会导致您的意外输出&#34;。

如果您希望能够拥有&#34; aData.path()&#34;的值。即使它不在范围内,您也可以复制其值。 如建议的那样,您可以将值复制到std :: string成员变量。