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】:

变量afun() 的本地变量,因此在您返回时会超出范围(并且不存在)。适用于任何情况的事实是纯粹的运气。您可以将a 设为静态,或动态分配,或以其他方式修复它。

【讨论】:

以上是关于C返回长度大于3的垃圾值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

(strcmp)两个字符串长度不同时如何比较?

如何获取对象长度[重复]

20190722 C++面试题

C中的RunLength解码[重复]

剑指Offer50:数组中重复的数字(Java)

编写函数,接受一个string,返回一个bool值,指出string是否有5个或者更多字符,使用此函数打印出长度大于等于5的元素