3

我对我们如何能够从函数返回字符串感到困惑。

char* someFunction()
{
  return "Hello, World"
}

上面的return语句不应该抛出“函数返回局部变量的地址”吗?它与函数有什么不同:

char* newFunction()
{
  char temp[] = "Hello, World";
  return temp;
}

实际上确实给出了上述警告。

4

2 回答 2

5

在第一种情况下,字符串一直存在于固定地址的常量只读内存中。在第二种情况下,字符串本地放在堆栈上,因此是临时的。

于 2012-06-18T17:47:40.900 回答
1

字符串文字具有静态存储持续时间。您可以返回一个指向字符串的指针,然后访问该字符串,这是完全有效且已定义的行为。

char* someFunction()
{
  return "Hello, World"
}

在以下情况下,您将返回一个指向具有自动存储持续时间的字符串的指针。具有自动存储持续时间的对象在退出定义它的块后被销毁。所以在函数返回后访问它是未定义的行为。

char* newFunction()
{
  char temp[] = "Hello, World";
  return temp;
}
于 2012-06-18T17:57:50.410 回答