在C中初始化三维char-Array

时间:2012-10-05 22:52:56

标签: c arrays multidimensional-array initialization

我希望你们能解决我遇到的问题。

对于一个小项目,我必须初始化一个三维char数组, 当我在主要初始化它时它没有问题,所以我想 我的键盘和椅子之间或多或少存在问题;)

我已将初始化从主分离到分离的.c 我会给你一瞥:

/*database.c*/
#define PHRASE_NUM 6
#define PHRASE_LEN 100
#define PHRASE_TYPES 2

void initDatabase(char database[][PHRASE_TYPES][PHRASE_LEN]) {

/* At this point I get the error "error: expected expression before ']' token" */
database[][PHRASE_TYPES][PHRASE_LEN]= 
{
        {{"string 1.1"},{"string 1.2"}},
        {{"string 2.1"},{"string 2.2"}},
        {{"string 3.1"},{"string 3.2"}},
        {{"string 4.1"},{"string 4.2"}},
        {{"string 5.1"},{"string 5.2"}},
        {{"string 6.1"},{"string 6.2"}}
};

}

 /*main.c*/
#include "database.h"
int main (void)
{
    char database[PHRASE_NUM][PHRASE_TYPES][PHRASE_LEN];
    initDatabase(database);

    printf(database[1][0]);
    /* should return string 2.1  */

    return 0;
}

正如上面的评论中所述,我得到以下错误:“错误:'''令牌之前的预期表达式”。 我检查了一般init是否出错了。如果我直接在main中实现它,那么这是有效的。

1 个答案:

答案 0 :(得分:3)

您只能在声明时初始化数组,而不是之后。

你能做的是:

void initDatabase(char database[][PHRASE_TYPES][PHRASE_LEN]) {
    char temp_array[][PHRASE_TYPES][PHRASE_LEN]= 
    {
            {{"string 1.1"},{"string 1.2"}},
            {{"string 2.1"},{"string 2.2"}},
            {{"string 3.1"},{"string 3.2"}},
            {{"string 4.1"},{"string 4.2"}},
            {{"string 5.1"},{"string 5.2"}},
            {{"string 6.1"},{"string 6.2"}}
    };
    memcpy(database, temp_array, sizeof(temp_array));
}