[英]Lifetime of a string literal returned by a function
考虑以下代码:
const char* someFun() {
// ... some stuff
return "Some text!!"
}
int main()
{
{ // Block: A
const char* retStr = someFun();
// use retStr
}
}
在someFun()
函数中, "Some text!!"
在哪里? 存储(我认为它可能在ROM的某些静态区域中),它的作用是什么 范围 一生?
retStr
指向的内存是在整个程序中占用还是在块A退出后释放?
C ++标准未说明应将字符串文字存储在何处。 但是,它的确保证了它们的生命周期是程序的生命周期。 因此,您的代码是有效的。
"Some text!!"
没有范围 。 范围是命名实体的属性。 更确切地说,它是名称本身的属性。 "Some text!!"
是一个无名的对象-字符串文字。 它没有名称,因此任何有关其“范围”的讨论都毫无意义。 它没有范围。
您似乎要问的不是范围 。 是"Some text!!"
寿命或保存期限 。 。 C / C ++中的字符串文字具有静态存储持续时间 ,这意味着它们可以“永久”存在,即只要程序运行即可。 因此, "Some text!!"
占用的内存"Some text!!"
永远不会被释放。
只需记住(作为补充说明)字符串文字是不可修改的对象。 写入该内存是非法的。
字符串将静态存储在程序二进制文件的特殊部分(通常在现代OS中为只读)。 它的内存未分配(单独为字符串分配,仅在将其加载到内存时分配给整个段),并且不会被释放。
retStr指向的内存是在整个程序中占用还是在块A退出后释放?
编辑:
这将是没有公布,但retStr
将不可用。 (块范围)
const char *ptr;
{
const char* retStr = "Scope";
ptr = retStr;
}
printf("%s\n", ptr); //prints "Scope"
//printf("%s\n", retStr); //will throw error "retStr undeclared"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.