const char*返回类型

Mus*_*ici 0 c++

我有一个返回const char*的函数

const char* SayHi()
{
string data="Mustafa Hi";
const char* cptr=data.c_str();
return cptr;
}
int main()
{ 
cout<<SayHi()<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)

但输出不是: Mustafa Hi.它是null.

如果我将数据变量定义为全局像

  string data;
  const char* SayHi()
  {
     data="Mustafa Hi";
     const char* cptr=data.c_str();
     return cptr;
  }
  int main()
  {

     cout<<SayHi()<<endl;
     return 0;
  }
Run Code Online (Sandbox Code Playgroud)

输出是Mustafa Hi.

但是对于const int*这是有效的;

    const int* aMethod()
    {
    int* aVar=new int(111);
    const int* acstPtr=aVar;
    return acstPtr;
    }
    int main()
    {
         cout<<*aMethod()<<endl;
         return 0;
    }
Run Code Online (Sandbox Code Playgroud)

输出:111

const int* aMethod()
    {
    int aVar =111; //in stack
    const int* acstPtr=&aVar;
    return acstPtr;
    }
Run Code Online (Sandbox Code Playgroud)

那么为什么不呢?

Nic*_*nks 6

第一个实现的问题是您返回一个指向临时内存的指针.因为'string data'变量仅在该函数的范围内定义,所以当函数消失时,您刚刚返回的指针现在指向free'd内存.在您的情况下,它必须被全部零覆盖.这就是你看到NULL的原因.