C 語言中標量初始化器的過量元素警告

Suraj P 2022年4月20日
C 語言中標量初始化器的過量元素警告

本文將學習如何解決警告訊息 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
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub