【问题标题】:Return pointer to a temporary in C [duplicate]返回指向C中临时变量的指针[重复]
【发布时间】:2013-01-12 22:21:02
【问题描述】:

可能重复:
returning a pointer to a literal (or constant) character array (string)?

下面的代码正确吗?

const char* state2Str(enum State state)
{
   switch (state)
   {
      case stateStopped: return "START";
      case stateRunning: return "RUNNING";
      default: return "UNKNOWN";
   }
}

printf("State is: %s\n", state2Str(stateRunning));

让我担心的是该函数返回一个指向临时对象的指针。这种返回值的生命周期是多少?语言是 C89。

【问题讨论】:

  • 字符串文字不是临时对象。它总是在记忆中。

标签: c pointers return temporary


【解决方案1】:

代码很好。您正在返回一个指向在您的程序期间有效的字符串文字的指针。

来自 C89 标准:

3.1.4 字符串字面量

字符串文字具有静态存储持续时间和类型 ``char 数组,'' 并使用给定的字符进行初始化。

【讨论】:

    【解决方案2】:

    就您问题中的代码而言,您返回指向临时对象的指针。您正在返回一个指向字符串文字的指针,该字符串文字存储在代码或全局数据中。所有字符串字面量的持续时间就是程序的生命周期。

    【讨论】:

      猜你喜欢
      • 2017-03-22
      • 2016-10-25
      • 2023-04-09
      • 2020-04-11
      • 2020-10-13
      • 1970-01-01
      • 2010-11-16
      相关资源
      最近更新 更多