返回指向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中临时变量的指针[重复]的主要内容,如果未能解决你的问题,请参考以下文章
C++ 函数返回临时string调用c_str()函数的坑(VS警告:C26815 指针无关联,因为它指向已销毁的临时实例)
C++ 函数返回临时string调用c_str()函数的坑(VS警告:C26815 指针无关联,因为它指向已销毁的临时实例)