返回指向C中临时变量的指针[重复]

Posted

技术标签:

【中文标题】返回指向C中临时变量的指针[重复]【英文标题】:Return pointer to a temporary in C [duplicate] 【发布时间】: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。

【问题讨论】:

字符串文字不是临时对象。它总是在记忆中。 【参考方案1】:

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

来自 C89 标准:

3.1.4 字符串字面量

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于返回指向C中临时变量的指针[重复]的主要内容,如果未能解决你的问题,请参考以下文章

删除指向同一个变量的指针

动态内存分配与指向它的指针变量

指向对象的JS指针[重复]

C++ 函数返回临时string调用c_str()函数的坑(VS警告:C26815 指针无关联,因为它指向已销毁的临时实例)

C++ 函数返回临时string调用c_str()函数的坑(VS警告:C26815 指针无关联,因为它指向已销毁的临时实例)

指针值传递指针的指针指针的引用无法返回临时变量地址