在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