C语言中的字符数组长度

5
在C语言中,你必须声明数组的长度:
int myArray[100];

但是当你处理char和字符串时,长度可以留空:

char myString[] = "Hello, World!";

编译器是否通过查看字符串来为您生成长度?


2
你也不必显式地声明 int 数组的长度:int a[] = {1,2,3}; - mhyfritz
所有答案都是正确的,而且都被点赞了。当我无法决定哪个答案最好时,我总是感到有些傻。 - user142019
6个回答

10

这不仅适用于char。例如,您可以这样做:

int myNumbers[] = { 5, 10, 15, 20, 42 };

这与编写以下代码等价:

int myNumbers[5] = { 5, 10, 15, 20, 42 };

使用字符串字面值初始化char数组是一种特殊情况。


10

是的,它包括终止符'\0'在内的长度。


5

编译器是否通过查看字符串来为您生成长度?

是的,这正是它能够工作的原因。编译器看到了常量值,并且可以填充长度,因此您不必自己进行操作。


3

如果你做了类似以下的操作,情况是一样的...

int x[] = {1,2,3};

3
是的,编译器知道字符串的长度并分配了适当的空间。

2

字符串字面量的大小(不是像 strlen 一样的长度)用于调整正在初始化的数组的大小。

您可以使用带有嵌入空字节的字符串字面量来初始化字符数组。结果数组将具有第一个(或第二个,...)null 之后的所有字节的大小。

char array[] = "foo\0bar\0baz\0quux";
/* sizeof array is 17
** array[3] is 0
** printf("%s\n", array + 4); prints bar
** array[11] is 0
** printf("%s\n", array + 12); prints quux
** array[16] == 0
*/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接