2012-03-11 12 views
0

"string [5] [*]"の次元を持つ2次元文字列配列を作成したいと思っていましたが、私はこのような何かをしたいと思います:2行の配列をC言語で固定した2次元配列を作成

... 
for(i = 0;i < 5;i++){ 
    char* word = ...; 
    if(strcmp(word,...)){ 
     string[i][j] = (char *) malloc(/*size of word*/); 
     string[i][j] = word; 
     j++; 
    } 
} 

「文字列」変数は、i番目の方向に長さ5のものでなければならないと私はj番目の方向に必要なだけを成長させるべきです。

私がやってみました:

char* string[5]; 

それが動作するようには思えません。上記のforループは単純化されており、部品は論理的でないように見えることに注意してください。

EDIT: 私は5つのカテゴリに文字列のリストをソートしようとしています。したがって、n次元配列は、特定の数の文字列(文字ではありません)を含む5つの配列を保持する必要があります。これは私が想定している3次元のchar配列ですが、それを書く方法を考えるのに問題がありました。すべての文字列[i] [j]タームがchar配列を保持したい。だから、string [0] [0]は "cat"などに等しいかもしれません。

+2

malloc()は成功するためのものではないことに注意してください。 NULLを戻してからエラー状態を処理するかどうかを確認する必要があります。 – SecurityMatt

答えて

2

これを試してください。上部にあなたのコードでも

char **string; 
string = (char **)(malloc(sizeof(char *) * 5)); 
//malloc the string[i] whenever you need to at what ever size is necessary. 

問題は、各string[i][j]charであり、あなたが非ポインタのためをmallocすることはできませんです。 string[i]はすべてchar *です。あなたはそれをmallocする必要があります。

+0

すべての文字列[i] [j]に対してmallocを使用したいとしたらどうなりますか?だから、すべての文字列[i] [j]タームはchar配列を保持していましたか?それを達成するために私の文字列オブジェクトをどのように構成しますか? "char *** string"を動作させる必要がありますか? – user972276

+0

あなたは文字列の配列のような 'char ***'を行うことができます。私はそれが適切なアプローチではないと思います。多分 'char *'または 'char **'に分割したいと思っています – twain249

1

このライン

string[i][j] = ... 

だろう二重にあなたがcharに何かを割り当てていることを意味しchar**、間接参照。その何かがポインタである場合、コンパイラはそれを許可しません。

string[i] = (char*) malloc(...); 

そして、あなたはそれをしようとしたとして、あなたの2次元配列の定義が残っている::

は代わりに、私はあなたがしたいと思います

char* string[5]; 

あなたは既にこれを知っているかもしれないが、私は」ちょうど場合に備えて、いくつかのメモを追加します。一般に、C文字列は=を使用して割り当てることはできません。代わりに、あなたが必要とする:

strcpy(string[i], word); 

を第二に、malloc()strlen(word)ことではなくてはならない。

strlen(word) + 1 

余分なバイトがNULターミネータのためです。

+0

私がしようとしているのは、文字列のリストを5つのカテゴリに分類することです。だから、私は行列の行列(つまり、3次元のchar配列)が好きです。私が間違っているなら私を訂正してください。しかし、あなたが示したものは5本の弦だけを保持しているようです。それぞれ5つのカテゴリではなく、私が望むだけ多くの文字列を保持します。 – user972276