【问题标题】:Initializing a 3-dimensional char-Array in C在 C 中初始化 3 维字符数组
【发布时间】:2012-09-27 03:06:13
【问题描述】:

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

对于一个小项目,我必须初始化一个 3 维字符数组, 当我在主中初始化它时,它可以正常工作,所以我认为 问题或多或少存在于我的键盘和椅子之间;)

我已将初始化从 main 分离到一个单独的 .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;
}

如上面评论中所述,我收到以下错误:“错误:']' 标记之前的预期表达式”。 我检查了我是否对一般初始化做错了什么。数组,但如果我直接在 main 中实现它,这将有效。

【问题讨论】:

    标签: c arrays multidimensional-array initialization


    【解决方案1】:

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

    你可以做的是:

    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));
    }
    

    【讨论】:

    • 谢谢你,你刚刚拯救了我的夜晚!我现在因为忘记了这么重要的事情而感到有点尴尬:/我想是时候让我再次阅读一些书了... ;) 再次感谢,祝你周末愉快 :)
    猜你喜欢
    • 1970-01-01
    • 2011-09-29
    • 2014-05-14
    • 2010-10-25
    • 2015-07-25
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多