从C99开始,字符串的类型是"hello, world"
一个char *
还是const char *
?我知道在C ++中它是后者,但在C中呢?
答案 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不会让它变得更强。