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比较不起作用”和“我如何停止我的线程”之间。