在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
。