我对字符串文字的数据类型感到困惑。是const char *
还是const char
?
答案 0 :(得分:26)
这是const char[N]
(与char const[N]
相同),其中N
是字符串的长度加上终止的{ {1}}(或者,如果您将“字符串的长度”定义为已包含NUL
),则只是字符串的长度。
这就是为什么你可以NUL
来获取字符串中的字符数(包括任何嵌入的sizeof("hello") - 1
);如果它是一个指针,它将无法工作,因为它总是你系统上指针的大小(减一)。
答案 1 :(得分:7)
"Hello world"
是const char[12]
(11个字符加'\0'
终止符。)
L"Hello world"
是const wchar_t[12]
。
自C ++ 14起,"Hello world"s
为std::string
。
另请注意C ++ 11添加的u8""
,u""
和U""
字符串文字符号,分别指定UTF-8,UTF-16和UTF-32编码。非限定字符串文字(即""
和L""
)的编码是(并且始终是)实现定义的。