10

私は本から自分自身に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]

何が問題なのかわからない...文字列の配列を作成する方法を調べようとしましたが、運がありません

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

サム

4

4 に答える 4

15
words_array[0]=word1;

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

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

char array[NUMBER_STRINGS][STRING_MAX_SIZE];

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

char *array[NUMBER_STRINGS];

その後:

array[0] = word1;
array[1] = word2;
array[2] = word3;

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

于 2013-03-01T16:01:31.173 に答える
9

文字列の配列が必要な場合。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));
于 2013-03-01T16:03:57.817 に答える
8

宣言

char words_array[3];

3文字の配列を作成します。文字ポインタの配列を宣言したいようです:

char *words_array[3];

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

char word1 [6] ="fluffy";

6文字の配列を作成しますが、実際には7文字にするように指示します。すべての文字列には'\0'、文字列の終わりを示すために使用される余分な文字、があります。

配列のサイズを7と宣言します。

char word1 [7] ="fluffy";

またはサイズを省略しておくと、コンパイラが自動的にサイズを計算します。

char word1 [] ="fluffy";
于 2013-03-01T16:02:00.650 に答える
5

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())。

于 2013-03-01T16:08:24.450 に答える