web-dev-qa-db-ja.com

Cで文字列の配列を作成する方法は?

私は本からCを独学で学び、クロスワードパズルを作成しようとしています。文字列の配列を作成する必要がありますが、問題が発生し続けます。また、配列についてあまり知りません...

これはコードの一部です:

char Word1 [6] ="fluffy", Word2[5]="small",Word3[5]="bunny";

char words_array[3]; /*This is my array*/

char *first_slot = &words_array[0]; /*I've made a pointer to the first slot of words*/

words_array[0]=Word1; /*(line 20)Trying to put the Word 'fluffy' into the fist slot of the array*/ 

しかし、私はメッセージを受け取り続けます:

crossword.c:20:16: warning: assignment makes integer from pointer without a cast [enabled by default]

何が問題なのか分かりません...私は文字列の配列を作る方法を調べようとしましたが、運はありません

どんな助けも大歓迎です、

サム

9
Wobblester
words_array[0]=Word1;

Word_array[0]charですが、Word1char *。あなたのキャラクターは住所を保持できません。

文字列の配列は次のようになります。

char array[NUMBER_STRINGS][STRING_MAX_SIZE];

文字列へのポインタの配列が必要な場合:

char *array[NUMBER_STRINGS];

その後:

array[0] = Word1;
array[1] = Word2;
array[2] = Word3;

多分あなたは this を読むべきです。

14
md5

宣言

char words_array[3];

3つの配列文字を作成します。文字の配列を宣言したいようですpointers

char *words_array[3];

ただし、もっと深刻な問題があります。宣言

char Word1 [6] ="fluffy";

6文字の配列を作成しますが、実際にはseven文字を持つように指示します。すべての文字列には、'\0'、それは文字列の終わりを伝えるために使用されます。

配列のサイズが7であることを宣言します。

char Word1 [7] ="fluffy";

または、サイズをそのままにしておくと、コンパイラーはそれを自動的に把握します。

char Word1 [] ="fluffy";

文字列の配列が必要な場合。 2つの方法があります。

1。文字の2次元配列

この場合、事前に文字列のサイズを知る必要があります。以下のようになります。

// This is an array for storing 10 strings,
// each of length up to 49 characters (excluding the null terminator).
char arr[10][50]; 

2。文字ポインターの配列

以下のようになります。

// In this case you have an array of 10 character pointers 
// and you will have to allocate memory dynamically for each string.
char *arr[10];

// This allocates a memory for 50 characters.
// You'll need to allocate memory for each element of the array.
arr[1] = malloc(50 *sizeof(char));
6
Jay

malloc()を使用して、メモリを手動で割り当てることもできます。

_int N = 3;
char **array = (char**) malloc((N+1)*sizeof(char*));
array[0] = "fluffy";
array[1] = "small";
array[2] = "bunny";
array[3] = 0;
_

事前に(コーディング時に)配列に含まれる文字列の数とそれらがどれだけ長くなるかがわからない場合は、これが方法です。ただし、メモリが使用されなくなったら、メモリを解放する必要があります(free()を呼び出します)。

4
kamituel