buc*_*h11 1 c string pointers dangling-pointer
当我们运行这段代码时,它正常工作并string constant在屏幕上打印:
char *someFun(){
char *temp = "string constant";
return temp;
}
int main(){
puts(someFun());
}
Run Code Online (Sandbox Code Playgroud)
但是,当我们运行以下类似的代码时,它将无法工作并在屏幕上打印一些垃圾:
char *someFun1(){
char temp[ ] = "string";
return temp;
}
int main(){
puts(someFun1());
}
Run Code Online (Sandbox Code Playgroud)
它背后的原因是什么?本质上,两个函数都做类似的事情(即返回"字符串"),但它们仍然表现不同.这是为什么?
char *temp = "string constant";
Run Code Online (Sandbox Code Playgroud)
string constant文字位于只读段.它在程序终止时被取消分配.所以,你可以有一个指向它的引用.
char temp[ ] = "string";
Run Code Online (Sandbox Code Playgroud)
string被复制到temp堆栈上.当函数返回时,堆栈的展开开始,它在函数范围内解除分配变量.但是你要返回一个对它的引用,它不再存在于堆栈中,因此你会得到垃圾.但有时你可能仍然得到正确的结果,但你不应该依赖它.