为什么这不起作用?是否有可能做一些创造性的演员来让它发挥作用?
1: const char* yo1 = "abc";
2: const char* yo2 = { 'a', 'b', 'c', '\0' }; // <-- why can't i do this?
3: printf("%s %s\n", yo1, yo2);
结果:分段错误
第 2 行没有做我期望它做的事情。
为什么这不起作用?是否有可能做一些创造性的演员来让它发挥作用?
1: const char* yo1 = "abc";
2: const char* yo2 = { 'a', 'b', 'c', '\0' }; // <-- why can't i do this?
3: printf("%s %s\n", yo1, yo2);
结果:分段错误
第 2 行没有做我期望它做的事情。
你可以做:
const char* yo2 = (char [4]) { 'a', 'b', 'c', '\0' };
这是有效的,将实现你想要的。请注意,它不等同于:
const char* yo2 = "abc":
在前一种情况下,whenyo2
在文件范围内声明:复合文字数组具有静态存储持续时间,但 whenyo2
在块范围内声明,复合文字具有自动存储持续时间。
在后一种情况下,"abc"
是一个字符串文字并且具有静态存储持续时间(文件范围或块范围)。
您还可以使用数组而不是指针:
const char yo2[] = { 'a', 'b', 'c', '\0' };
关于你的例子。在 C 中:
const char* yo2 = { 'a', 'b', 'c', '\0' };
无效,您的编译器将其解释为:
const char* yo2 = (char *) 'a';
的值'a'
不是指针值(地址),因此取消引用会yo2
调用未定义的行为。