1

皆さんが私が抱えている問題を解決できることを願っています。

小さなプロジェクトでは、3次元の文字配列を初期化する必要があります.メインで初期化すると問題なく動作するため、問題は多かれ少なかれキーボードと椅子の間にあると思います;)

初期化をメインから分離された .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;
}

上記のコメントで述べたように、次のエラーが表示されます:「エラー: ']' トークンの前に式が必要です」。一般的な初期化で何か問題があったかどうかを確認しました。の配列ですが、これをメインに直接実装すると機能します。

4

1 に答える 1

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));
}
于 2012-10-05T22:54:51.653 に答える