如何在C中初始化指向NULL的动态指针数组?

DrD*_*Dee 2 c

我对C相当陌生,我不明白为什么以下两个语句不能产生相同的结果:

char *fields[14] = {NULL};

const int num_fields = 14;
char *fields[num_fields] = {NULL};
Run Code Online (Sandbox Code Playgroud)

选项1有效,但选项2无效。它说“可变大小的对象可能未初始化”,并给出警告“警告:数组初始化器中的多余元素”。我在OSX上使用gcc 4.2.1。

感谢您分享您的想法!

cni*_*tar 5

第二个对象称为VLA(可变长度数组),由C99很好地定义。要实现您想要的,您可以使用以下方法:

for (i = 0; i < num_fields; i++)
    fields[i] = NULL;
Run Code Online (Sandbox Code Playgroud)

问题的要点const int num_fields是与14,并不是一个常数,而是只读的。