我是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++;
}
答案 0 :(得分:0)
name 的声明使其静态(非动态)分配。因此,您不需要使用malloc()来分配空间。
答案 1 :(得分:0)
我知道这个答案很晚,但我犯了一个类似的愚蠢错误。变量Name name
应该是一个指针。即Name * name