C 语言中标量初始化器的过量元素警告
Suraj P
2022年4月20日
本文将学习如何解决警告消息 excess elements in scalar initializer
。当我们用太多元素初始化数组时,就会出现这个警告。
解决 C 语言中的警告消息 excess elements in scalar initializer
示例代码 1:
#include <stdio.h>
int main(void)
{
int array [2][3][4] =
{
{ {11, 22, 33}, { 44, 55, 66} },
{ {161, 102, 13}, {104, 15, 16}, {107, 18, 19}},
{ {100, 20, 30, 400}, {500, 60, 70, 80}, {960, 100, 110, 120}},
};
}
程序成功运行,但我们收到以下警告。
In function 'main':
[Warning] excess elements in array initializer
[Warning] (near initialization for 'array')
出现上述错误是因为声明的是 int[2][3][4]
,但我们试图将其初始化为 int [3][3][4]
。
为了解决这个错误,我们必须更正数组的大小。
更正的代码:
#include <stdio.h>
int main(void)
{
int array [3][3][4] =
{
{ {11, 22, 33}, { 44, 55, 66} },
{ {161, 102, 13}, {104, 15, 16}, {107, 18, 19}},
{ {100, 20, 30, 400}, {500, 60, 70, 80}, {960, 100, 110, 120}},
};
}
示例代码 2:
#include <stdio.h>
int main(void)
{
static char (*check)[13] = {
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13},
{11, 22, 33, 44, 55, 66, 77, 88, 99, 100, 110, 120, 130}
};
}
我们也收到同样的警告;编译器发出警告是因为我们传递了两个指针,但只存在一个指向 13
元素数组的指针。声明了比必要更多的元素。
我们可以通过两种方式解决这个问题。
更正的代码 1:在这里,我们创建了一个包含两个指针的数组。
#include <stdio.h>
int main(void)
{
//static char *check[2] = {
char ar1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
char ar2[] = {11, 22, 33, 44, 55, 66, 77, 88, 99, 100, 110, 120, 130};
char *check[] ={ar1,ar2};
}
更正代码 2:这里,我们只有一个数组指针。指针指向一个 10
个元素的数组。我们可以增加数组指针以获取下一个 10
元素。
#include <stdio.h>
int main(void)
{
char (*check)[10] = (char [][10]) {
{1,2,3,4,5,6,7,8,9,10},
{0, 31, 29, 31, 30, 31, 30, 31, 31, 30}};
}
Author: Suraj P