2013-03-29 2 views
1

Я новичок в языке программирования C. Я хотел написать хеширующую программу. Я мог бы сделать эту программу с ограниченным количеством имен typedef, но когда я использую динамическое распределение, появляется ошибка недопустимого инициализатора.Недействительный инициализатор - C

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

Ваше заявление о имени делает его статический (не динамически) выделяется. Поэтому вам не нужно использовать malloc() для выделения пространства.

0

Я знаю, что этот ответ задерживается, но я совершил подобную глупую ошибку. переменная Name name должна быть указателем. i.e Name * name