0

したがって、ユーザーは不明な量の単語を入力しようとしています。各単語の最大長は10であると想定しています。reallocから代入erorrの左オペランドとして必要な左辺値を取得しました。私はCに不慣れで、グーグルを試しましたが、有用な答えを見つけることができません。

コード:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    #define CAPACITY 10
    #define NUM_OF_WORDS 10
    int main(void)
    {

    char *word= malloc(10*sizeof(char));
    char *w[NUM_OF_WORDS];

    int i;
    int n;

    for(i = 0 ; scanf("%s", word)==1; ++i)
    {

    if( i == NUM_OF_WORDS-1)
    w = realloc(w, (NUM_OF_WORDS*=2) * sizeof(char));

    w[i] = malloc( strlen(word)+1 * sizeof(char));
    strcpy(w[i], word);
    }

    return 0;
    }
4

3 に答える 3

2
  1. NUM_OF_WORDSは定数であり、割り当てることはできません。

  2. wは配列を使用しないでください、charを使用する必要があります**

  3. reallocでは、sizeof(char *)を使用する必要があります

変更されたコード:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define CAPACITY 10
#define NUM_OF_WORDS 10

int main(void)
{

    char word[10];
    char **w = (char **) malloc(NUM_OF_WORDS * sizeof(char *));

    int i;
    int capacity = NUM_OF_WORDS;

   for(i = 0 ; scanf("%s", word)==1; ++i)
   {

       if( i == capacity -1)
           w = (char **)realloc(w, (capacity *=2) * sizeof(char *));

       w[i] = (char *)malloc( strlen(word)+1 * sizeof(char));
       strcpy(w[i], word);
   }

   // at last, release w and w's element.
   while ( --i >= 0 )
   {
        free(w[i]);
   }

   free( w );       
   return 0;
}
于 2012-04-06T02:41:04.113 に答える
1

を使用できるようにする場合は、スタックで宣言するのではなく、を使用しrealloc()て配列を割り当てる必要があります。wmalloc()

于 2012-04-06T02:16:28.150 に答える
0
w = realloc(w, (NUM_OF_WORDS*=2) * sizeof(char));

エラーについて-

(NUM_OF_WORDS * = 2)前処理後は(10 * = 2)です。10 * 2の積を10に割り当てることはできません。10は右辺値であり、コンパイラーが不満を言っているものを割り当てることはできません。あなたはおそらく(NUM_OF_WORDS * 2)を意味しました

于 2012-04-06T02:21:16.430 に答える