返回一个临时的const char * - 它会起作用吗

时间:2017-04-19 07:15:38

标签: c

我想创建一个方法get_name(...),它返回enum_value的名称。枚举值很少,但可以达到1 ^ 32 - 1(所以我不认为我可以使用数组映射)。

我做了以下事情:

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";
}

这是真的吗?它会一直有效吗?

我没有返回指向临时的指针吗?

1 个答案:

答案 0 :(得分:13)

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

所以做第二种选择是安全的,并没有涉及“临时”。