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