【问题标题】:C returning garbage value for length greater than 3 [duplicate]C返回长度大于3的垃圾值[重复]
【发布时间】:2013-06-17 20:23:35
【问题描述】:

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

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

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

问题是,如果我返回长度为 3 或更短的字符串,那么一切都很好。如果我返回长度 > 3 的字符串,那么我会收到与字符串一起的垃圾值。这是为什么呢?

【问题讨论】:

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

标签: c


【解决方案1】:

您返回一个指向局部变量的指针。该变量是堆栈分配的,并在函数退出时被销毁。使用这样的指针是未定义的行为。

【讨论】:

    【解决方案2】:
    char* fun()
    {
        char a[] = "hello";
        return a;
    }
    

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

    【讨论】:

      【解决方案3】:

      您正在返回一个自动变量,这是一个很大的禁忌。它完全起作用是实施的意外。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2014-07-20
          • 2012-07-13
          • 2013-03-19
          • 2020-09-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多