我对我们如何能够从函数返回字符串感到困惑。
char* someFunction()
{
return "Hello, World"
}
上面的return语句不应该抛出“函数返回局部变量的地址”吗?它与函数有什么不同:
char* newFunction()
{
char temp[] = "Hello, World";
return temp;
}
实际上确实给出了上述警告。
在第一种情况下,字符串一直存在于固定地址的常量只读内存中。在第二种情况下,字符串本地放在堆栈上,因此是临时的。
字符串文字具有静态存储持续时间。您可以返回一个指向字符串的指针,然后访问该字符串,这是完全有效且已定义的行为。
char* someFunction()
{
return "Hello, World"
}
在以下情况下,您将返回一个指向具有自动存储持续时间的字符串的指针。具有自动存储持续时间的对象在退出定义它的块后被销毁。所以在函数返回后访问它是未定义的行为。
char* newFunction()
{
char temp[] = "Hello, World";
return temp;
}