我对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。
感谢您分享您的想法!
第二个对象称为VLA(可变长度数组),由C99很好地定义。要实现您想要的,您可以使用以下方法:
for (i = 0; i < num_fields; i++)
fields[i] = NULL;
Run Code Online (Sandbox Code Playgroud)
问题的要点const int num_fields是与14,并不是一个常数,而是只读的。