在C中为const char *分配一个define常量

时间:2013-11-26 02:58:47

标签: c constants assign

我不完全确定将常量赋给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);

3 个答案:

答案 0 :(得分:1)

opt1 = MSG1;

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

strcpy(opt2, MSG1);

会将MSG1的内容复制到数组opt2

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

  

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

因此strcpy(opt2, MSG3);在语法上不会错误,但是当opt2指向NULL时,这将导致分段错误(SIGSEGV)。

另一个注意事项:

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

@happydave是对的,没有const

相关问题