3

私は C プログラミング言語の初心者で、ハッシュ プログラムを書きたいと思っていました。typedef ... Name指定した数の要素 (配列内) を使用してこのプログラムを作成できますが、動的割り当てを使用すると、「無効な初期化子」エラーが表示されます。

    typedef char Name[30];
    
    Name hashTable[MAX];
    
    int hash(Name name){
      int long sum = 0;
      int len=strlen(name);
      int i = 0;
      for (; i<len;i++)
        sum += name[i];
      sum = sum % MAX;
      printf("\nhash of [%s] = %ld\n",name,sum);
      return sum;
    }

    void main(){
      int i,j;
      for(i=0;i<MAX;i++)
        strcpy(hashTable[i],"");
      int pos, x, cont=1;
      printf("number of names: ");
      scanf("%d",&x);
      while (x>=cont){
       Name name = malloc(sizeof(Name));  // why this line have the error of "invalid initializer"?
       printf("\ntype the %dº name: ",cont);
       scanf("%s",name);
       pos=hash(name);
       strcpy(hashTable[pos],name);
       cont++;
    }
4

2 に答える 2

2

この答えが遅いことはわかっていますが、同様の愚かな間違いを犯しました。variableName nameはポインタでなければなりません。すなわちName * name

于 2016-06-22T06:01:57.607 に答える
0

nameの宣言により、(動的ではなく) 静的に割り当てられます。したがって、領域を割り当てるために malloc() を使用する必要はありません。

于 2013-03-29T04:00:30.280 に答える