C返回长度大于3的垃圾值

C返回长度大于3的垃圾值,c,C,我有一个必须接收字符串的主函数 main() { char *c = fun(); } char* fun() { char a[] = "hello"; return a; } 问题是,如果我返回长度小于等于3的字符串,那么一切都很好。如果我返回长度大于3的字符串,那么我将随字符串一起接收垃圾值。为什么呢 char* fun() { char a[] = "hello"; return a; } 数组a具有自动存储持续时间。函数结束时,数组对象a被

我有一个必须接收字符串的主函数

main()
{
    char *c = fun();
}

char* fun()
{
    char a[] = "hello";
    return a;
}
问题是,如果我返回长度小于等于3的字符串,那么一切都很好。如果我返回长度大于3的字符串,那么我将随字符串一起接收垃圾值。为什么呢

char* fun()
{
    char a[] = "hello";
    return a;
}

数组
a
具有自动存储持续时间。函数结束时,数组对象
a
被销毁。这意味着指针在函数退出时变为无效,对它的任何使用都是未定义的行为。

返回指向局部变量的指针。变量是堆栈分配的,当函数退出时它将被销毁。使用这样的指针是未定义的行为。

您返回的是一个自动变量,这是一个很大的禁忌。它的工作完全是实现的意外。

变量
a
fun()
的本地变量,因此在返回时超出范围(并且不存在)。无论在什么情况下,这都是纯粹的运气。您可以使
成为一个
静态或动态分配,或以其他方式修复它。

@H2CO3-可能介于“我的FP比较不起作用”和“我如何停止我的线程”之间。