C返回长度大于3的垃圾值[重复]
Posted
技术标签:
【中文标题】C返回长度大于3的垃圾值[重复]【英文标题】:C returning garbage value for length greater than 3 [duplicate] 【发布时间】:2013-06-17 20:23:35 【问题描述】:我有一个必须接收字符串的主函数。
main()
char *c = fun();
char* fun()
char a[] = "hello";
return a;
问题是,如果我返回长度为 3 或更短的字符串,那么一切都很好。如果我返回长度 > 3 的字符串,那么我会收到与字符串一起的垃圾值。这是为什么呢?
【问题讨论】:
@H2CO3 - 可能介于“我的 FP 比较不起作用”和“如何停止我的线程”之间。 【参考方案1】:您返回一个指向局部变量的指针。该变量是堆栈分配的,并在函数退出时被销毁。使用这样的指针是未定义的行为。
【讨论】:
【参考方案2】:char* fun()
char a[] = "hello";
return a;
数组a
具有自动存储期限。在函数结束时,数组对象a
被销毁。这意味着指针在函数退出时变得无效,任何使用它都是未定义的行为。
【讨论】:
【参考方案3】:您正在返回一个自动变量,这是一个很大的禁忌。它完全起作用是实施的意外。
【讨论】:
【参考方案4】:变量a
是fun()
的本地变量,因此在您返回时会超出范围(并且不存在)。适用于任何情况的事实是纯粹的运气。您可以将a
设为静态,或动态分配,或以其他方式修复它。
【讨论】:
以上是关于C返回长度大于3的垃圾值[重复]的主要内容,如果未能解决你的问题,请参考以下文章
编写函数,接受一个string,返回一个bool值,指出string是否有5个或者更多字符,使用此函数打印出长度大于等于5的元素