错误:char数组初始值设定项中的多余元素

时间:2015-11-26 00:17:58

标签: c arrays

我正在为大学作业创建天气预报。我正在开发一个函数,假设打印出所有12个月的数据。我有一个12的大小的数组,并保留了12个月的名称。当我编译程序时,我不断收到以下错误:

assignment3.c:149:5: error: excess elements in char array initializer

以下是具有此数组的函数:

    void printMonthlyStatistic(int month,const struct MonthlyStatistic* monthly){

    int i;
    char monthNames[12] = {"January", "February", "March", "April", "May", "June", "July", "August",
                           "September", "October", "November", "December"};

    for (i=0;i<12;i++) {

        printf(" %c | %.1f | %.1f | %.1f | %.1f \n",monthNames[i],monthly->maxTemperature,monthly->minTemperature,monthly->averageTemperature,
                                                    monthly->totalPrecipitation);
    }

}

2 个答案:

答案 0 :(得分:1)

您已经定义了一个单独的char值数组,并且由于元素是字符串文字并且由多个字符组成,因此初始化程序中有多余的元素,因此会显示错误消息。

相反,你可以定义一个char*数组,其中每个元素都指向数组中每个字符串文字的开头。

const char* monthNames[12] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};

因为这些字符串可能最终会出现在二进制文件的只读数据段中。声明它们const不会有害。

答案 1 :(得分:0)

在您的代码中

char monthNames[12]

表示char数组,不是字符串,而是单个字符。 您必须将数组更改为以下内容:

char* montNames[12]

为了拥有一个字符串数组而不是一个简单的字符。