C - 使用 2D 数组的 Malloc 和 strtok



该程序应该num数组(在文件中)和名称(第一个,最后一个,初始)的2d数组。但是我一直遇到赛格错误,我不知道为什么。我所做的是分配内存,然后使用fscanf获取行数,fgets获取名称,同时将所有'n'更改为''。然后,我使用 strtok 将单独的数组放入 token 中,我认为我在某处可能是错误的。

编辑:现在我正在传递"strcpy"的参数 1 从整数制作指针而无需强制转换。我将如何解决它

这是我的代码:

int main (int argc, char *argv[])
{
   int num;
   FILE *fp;
   fp = fopen(argv[1], "r");
   fscanf(fp, "%d", &num);
   int j;
   char **f, **l, *m;
   int i = 0;
   f = (char**) malloc(num * sizeof (char*))

   for (i = 0; i < num;i++)
       ;
   f[i] = (char*) malloc(num * sizeof (char));
   l = (char**)malloc(num*sizeof(char*));
   for (i=0; i<num;i++)

   l[i] = (char*) malloc(num * sizeof (char));
   m = (char*) malloc(num*sizeof(char));
   read_names(fp, f, l, m, num);
//  sort(fp, num, f, l, m);
//  display(num, ar);
   for (j = 0; j < num; j++) {
       free(f[j]);
       free(l[j]); 
   }
   free(f);
   free(l);
   free(m);
   fclose(fp);
   return(0);
}
     void read_names (FILE *fp, char **f, char **l, char m,int num)
     {
     int i=0;
    char temp[80];

    for (i=0; i<num; i++)
    {  fgets(temp, 80,fp );
    char *ptr=strtok (temp,"," );
    strcpy(*f[i], ptr);
    char *ptr1=strtok (temp, " ");
    strcpy(*l[i], ptr1);
    char *ptr2=strtok (temp, ". ");
    strcpy(m[i],ptr2);
}
    }

你的 for 循环有问题。您不是将行括在它们下面,而是用分号终止 for() 循环。删除分号,或者更好的是,养成始终使用{}的习惯,您将不会再遇到此问题。

编辑:如果您正确缩进了代码,您可能会发现错误。

f=(char**)malloc (num*sizeof(char*));
for (i=0; i<num;i++);
f[i]=(char*)malloc (num*sizeof(char));
l=(char**)malloc (num*sizeof(char*));
for (i=0; i<num;i++);
l[i]=(char*)malloc (num*sizeof(char));
m=(char*)malloc (num*sizeof(char));

你应该确保 f,f[i],l,l[i] 不是 NULL。

相关内容

  • 没有找到相关文章

最新更新