c/c++语言开发共享在C中为const char *分配一个define常量

我不完全确定哪个是将常量赋给const char *的正确方法。 两种方式都可以吗?

 #define MSG1 "My Message #1" #define MSG2 "My Message #2" #define MSG3 "My Message #3" const char *opt1 = NULL; const char opt2[20]; switch(n){ case 1: opt1 = MSG1; // or should it be: strcpy(opt2, MSG1); break; case 2: opt1 = MSG2; // or should it be: strcpy(opt2, MSG2); break; case 3: opt1 = MSG3; // or should it be: strcpy(opt2, MSG3); break; } // ... printf("%s", optX); 

     opt1 = MSG1; 

    将指针opt1指定为指向MSG1指向的字符串文字。

     strcpy(opt2, MSG1); 

    MSG1的内容复制到数组opt2

    由于您将opt2声明为const ,因此修改其内容是非法的,因此第一种方法是正确的。

    两者都可以工作(除了事实上应该声明opt2没有const限定符,因为你用strcpy写入数组)。 opt1版本效率更高,因为它只是一个指针赋值,而不是逐个字符的副本。

    strcpy()函数将src指向的字符串(包括终止空字节(’ 0’))复制到dest指向的缓冲区

    如此strcpy(opt2, MSG3); 语法不正确,但是当opt2指向NULL ,这将导致分段错误(SIGSEGV)。

    另一个注意事项:

    编译器决定是否strcpy(opt2, MSG3); 效率低于opt1 = MSG3; 因为大多数现代实施都是“聪明”,不足以。

    @happydave是对的,没有const

      以上就是c/c++开发分享在C中为const char *分配一个define常量相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/559754.html

      (0)
      上一篇 2021年1月27日
      下一篇 2021年1月27日

      精彩推荐