C - 数组中的多余元素

时间:2009-11-05 12:38:45

标签: c arrays pointers warnings

我正在学习C,我正在玩指针和数组。我正在尝试使用以下代码创建一个指针数组:

const int NUM_P = 50; // Line 10
char *pS[NUM_P] = { NULL }; // Line 11

编译时收到以下警告和错误:

→gcc array.c -o array
array.c:在函数'main'中:
array.c:11:错误:可能无法初始化可变大小的对象
array.c:11:警告:数组初始化程序中的多余元素
array.c:11:警告:(接近初始化'pS')

我无法弄清楚这个错误,我已经在线查看并且无法找到问题的解释和解决方案。

任何人都可以帮忙吗?

干杯

EEF

1 个答案:

答案 0 :(得分:4)

您的主要问题是初始化行(= {NULL};),因为当数组的大小是变量时,显然无法以的方式初始化数组。如果使用#define NUM_P 50强制数组大小为真正的编译时常量,那么数组将没有可变大小,并且初始化方法可以正常编译。

作为旁注,#define NUM_P 50const int NUM_P = 50之间的区别在于C89不允许将变量用作数组维度,但C99确实如此;但是,C99尚未得到所有编译器的完全支持。 gcc接受大小为NUM_P的字符数组的事实不符合C89。

从技术上讲,您可以在命令行上使用一个标志来告诉gcc您要在C99中编译:

gcc -std=c99 FILE.c

顺便说一句,在学习C时,从列出的错误的顶部开始,然后从那里开始工作。在这种情况下,警告在您处理顶部的错误之前没有任何问题:“可能无法初始化可变大小的对象”。< / p>