C中字符串文字的类型是什么?

时间:2015-12-24 16:27:56

标签: c string

从C99开始,字符串的类型是"hello, world"一个char *还是const char *?我知道在C ++中它是后者,但在C中呢?

4 个答案:

答案 0 :(得分:5)

C中的字符串文字不是指针,它们是char的数组。您可以通过查看sizeof("hello, world")which is 13来说明这一点,因为null终结符包含在文字的大小中。

C99允许将字符串文字分配给char *,这与C ++不同,后者需要const char *

答案 1 :(得分:2)

字符串文字在C中的类型为char[N]。例如,"abc"是一个包含4个字符的数组(包括NUL终结符)。

答案 2 :(得分:1)

C中字符串文字的类型为char[]。这可以直接分配给char*。在C ++中,类型为const char[],因为所有常量在C ++中都标有const

答案 3 :(得分:0)

字符文字始终是只读字符的数组,当然数组包括字符串终结符。因为所有数组当然都会衰减到指向第一个元素的指针,但是只读会使它成为指向const的指针。它起源于C,并由C ++继承。

问题是C99允许较弱的char *(没有const)C ++(具有更强的类型系统)不允许。如果对字符串文字进行非常量char *指向,则某些编译器可能会发出警告,但它是允许的。尝试通过非const char *修改字符串会导致未定义的行为

我没有在我面前获得C11规格的副本,但我认为C11不会让它变得更强。