Недопустимый инициализатор в 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] = %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++;
    }

person Otavio Mota    schedule 29.03.2013    source источник


Ответы (2)


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

person null    schedule 22.06.2016
comment
Вероятно, это должно быть char *name . Программе потребуются другие изменения, чтобы использовать Name *name, поскольку тогда другое использование name в вызовах функций становится неверным. - person M.M; 26.02.2021
comment
конечно, это при условии, что простой Name name; по каким-то причинам нежелателен - person M.M; 26.02.2021

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

person sigpipe    schedule 29.03.2013