C中无效的初始化项



我是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] = %ldn",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++;
    }

我知道这个答案晚了,但是我犯了一个类似的愚蠢的错误。变量Name name应该是指针。即Name * name

您的name声明使其静态(而不是动态)分配。因此,您不需要使用malloc()来分配空间。

最新更新