2017-04-19 31 views
3

我想创建一个方法get_name(...),它返回一个enum_value的名字。枚举值很少,但可以高达1^32 - 1(所以我不认为我可以使用数组映射)。返回一个临时的const char * - 它会起作用

我做了以下内容:

const char* get_name(type_t x) { 
    static const char* name_1 = "NAME_FOR_TYPE_1"; 
    static const char* name_2 = "NAME_FOR_TYPE_2"; 
    ... 
    static const char* invalid = "INVALID"; 

    switch (x) { 
     case type_1: return name_1; 
     case type_2: return name_2; 
     ... 
    } 
    return invalid; 
} 

然后,我被告知以下也将工作:

const char* get_name(type_t x) { 
    switch (x) { 
     case type_1: return "NAME_FOR_TYPE_1"; 
     case type_2: return "NAME_FOR_TYPE_2"; 
     ... 
    } 
    return "INVALID"; 
} 

是真的吗?它会一直工作吗?

我没有返回临时指针吗?

+0

什么是“临时”?你读过关于范围和寿命的内容吗?哪一部分令人困惑?看,分享你的研究也会帮助其他人。 –

回答

13

字符串文字被存储为具有完整程序生命周期的数组。指向他们的指针永远不会失效。

因此,做第二种选择是安全的,并且不涉及“临时”。

相关问题