无效的初始值设定项-C

问题描述 投票:1回答:2

我是C编程语言的初学者。我想写一个哈希程序。我可以使用有限数量的typedef名称来执行此程序,但是当我使用动态分配时,会出现无效的初始化程序错误。

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++;
}
initializer
2个回答
0
投票

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.