【问题标题】:Invalid Initializer in CC中的无效初始化程序
【发布时间】:2013-03-19 18:31:54
【问题描述】:

我是 C 编程语言的初学者,我想编写一个散列程序。我可以用指定数量的typedef ... Name elemenst(在一个数组中)编写这个程序,但是当我使用动态分配时,会出现“invalid initializer”错误。

    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++;
    }

【问题讨论】:

    标签: c initializer


    【解决方案1】:

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

    【讨论】:

    • 应该是char *name。该程序需要进行其他更改才能使用Name *name,因为在函数调用中name 的其他用途变得不正确
    • 当然,这是假设简单的Name name; 出于某种原因是不可取的
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多