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