我有一个返回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)
那么为什么不呢?
第一个实现的问题是您返回一个指向临时内存的指针.因为'string data'变量仅在该函数的范围内定义,所以当函数消失时,您刚刚返回的指针现在指向free'd内存.在您的情况下,它必须被全部零覆盖.这就是你看到NULL的原因.