简单的问题。我知道我应该只使用 std::string
,但很好奇为什么会这样:
const char* example = "test";
虽然这会导致第二个字符出现“过多的初始化值”?
const char* example = {0x74, 0x65, 0x73, 0x74, 0x00};
这两个东西不应该完全等价吗?
最佳答案
不同之处在于字符串字面量是它们自己的数组。 "test"
在这里不是用作数组的初始值设定项(一种特殊情况,它等同于 { 't', 'e', 's', 't', '\0' }
),但与任何其他值的方式相同。
换句话说,当您在代码中使用字符串文字 "test"
时,编译器会自动创建类似于
static const char __str_literal0[] = {'t', 'e', 's', 't', '\0'};
然后
const char *example = "test";
被编译成
const char *example = __str_literal0;
即它只是指向(已经存在的静态)字符数组。
另一方面,如果您尝试使用初始化列表,编译器会将变量的第一个字段(即 example
本身)设置为初始化列表中的第一个值(example = 0x74
),然后提示你的列表中有太多的初始化器。
关于c++ - 为什么不能将 char 指针定义为数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52136287/