C 返回一个临时常量字符*-它会工作吗

C 返回一个临时常量字符*-它会工作吗,c,C,我想创建一个方法get_name(…),它返回枚举值的名称。枚举值很少,但最多可以是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 = "INV

我想创建一个方法get_name(…),它返回枚举值的名称。枚举值很少,但最多可以是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";
}
这是真的吗?它会一直有效吗


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

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

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

什么是“临时性”?你读过关于作用域和寿命的书吗?哪一部分令人困惑?看,分享你的研究也会帮助他人。