我对字符串文字的数据类型感到困惑。是一个const char *
还是一个const char
?
问问题
3584 次
2 回答
30
它是一个const char[N]
(与 相同的东西)char const[N]
,其中N
是字符串的长度加上一个用于终止的NUL
(或者如果您将“字符串的长度”定义为已经包含 ,则只是字符串的长度NUL
)。
这就是为什么您可以sizeof("hello") - 1
获取字符串中的字符数(包括任何嵌入NUL
的 s);如果它是一个指针,它将不起作用,因为它始终是系统上指针的大小(减一)。
于 2012-09-20T17:47:29.680 回答
8
"Hello world"
是const char[12]
(十一个字符加上'\0'
终止符)。
L"Hello world"
是const wchar_t[12]
。
从 C++14 开始,"Hello world"s
就是std::string
.
还要注意 C++11 添加的u8""
,u""
和U""
string 文字符号,它们分别指定 UTF-8、UTF-16 和 UTF-32 编码。非限定字符串文字(即""
和L""
)的编码是(并且一直是)实现定义的。
于 2014-09-30T08:11:16.423 回答