我不完全确定哪个是将常量赋给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