从c中的函数返回字符串

时间:2012-06-18 17:45:56

标签: c string

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

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

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

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

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

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

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

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

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