加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

返回一个临时的const char * – 它会工作

发布时间:2020-12-16 10:37:22 所属栏目:百科 来源:网络整理
导读:参见英文答案 What is the lifespan of string literals in C? ????????????????????????????????????1个 我想创建一个方法get_name(…),它返回enum_value的名称.枚举值很少,但可以达到1 ^ 32 – 1(所以我认为我不能使用数组映射). 我做了以下事情: const c
参见英文答案 > What is the lifespan of string literals in C? ????????????????????????????????????1个
我想创建一个方法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";
}

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

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

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读