【问题标题】:C - Excess elements in arrayC - 数组中的多余元素
【发布时间】:2010-12-13 09:52:43
【问题描述】:

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

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

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

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

我无法弄清楚这个错误,我上网查了一下,找不到问题的解释和解决方案。

有人可以帮忙吗?

干杯

伊夫

【问题讨论】:

  • 你想在“char *pS[NUM_P] = { NULL };”中做什么?
  • 也许 C 的语法有点混乱。在 C 中, const int 意味着您正在创建一个您计划在初始化后不更改的变量。在 C++ 中,它是一个真正的常量,可以按照您的尝试使用。

标签: c arrays pointers warnings


【解决方案1】:

您的主要问题是初始化行 (= {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 时,请从列出的错误开始,然后从那里向下学习。在这种情况下,警告在您处理顶部的错误之前没有任何问题:“可变大小的对象可能未初始化”。

【讨论】:

  • 谢谢,接受 '= {NULL};'解决了这个问题,它运行正常。我实际上正在关注“C - 从新手到专业”一书,它作为教程源代码的一部分!现在可以了,再次感谢。埃夫
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多