在数组声明中,方括号
[
和
]
中的数字表示数组中元素的数量。
你问题中的代码:
char number_str[];
sprintf(number_str, "%lld", number_ll);
在函数定义内出现空括号是非法的,你需要指定数组的大小。调用 sprintf
或任何其他函数必须出现在函数定义内。
如果你指定了数组的大小:
char number_str[100];
sprintf(number_str, "%lld", number_ll);
创建一个对象number_str
,它是由100个char
元素组成的数组。如果你把数组创建得太小:
char number_str[3];
sprintf(number_str, "%lld", number_ll);
如果你这样做,你的程序可能看起来能够工作,但实际上它的行为是未定义的。 sprintf
调用将尝试在一个长度为 3 的数组中存储 6 个字符。
C 编译器没有义务诊断此错误。它很可能会让你尝试这样做,导致数据被写入你不拥有的内存区域。
在文件范围内,你可以声明类似于:
extern char array[];
这段文字指定了一个名为array
的对象,类型为数组(大小未指定),其中存储char
类型的元素,并且该对象在其他地方定义。
作为(有些烦人的)特例,以数组语法定义的函数参数实际上是一个指针:
void func(char param[42]) {
}
请记住,数组和指针是两个不同的概念。关于它们之间有些令人困惑的关系,请参见comp.lang.c FAQ第6节的说明。