该程序应该采用num
数组(在文件中)和2d数组的名称(first,last,initial)。但是我一直遇到一个段错,我不知道为什么。我所做的是分配内存,然后使用fscanf
获取行数,fgets
获取名称,同时将所有'\n'
更改为'\0'
。然后,我使用strtok
将单独的数组放入令牌,我相信我可能在某处出错。
编辑:现在我正在传递'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);
}
}
答案 0 :(得分:3)
你的for循环有问题。您使用分号终止for()循环,而不是将它们包含在它们下面。删除分号,或者更好,养成一直使用{
和}
的习惯,你不会再遇到这个问题。
编辑: 如果你正确缩进代码,你可能只是发现了错误。
答案 1 :(得分:1)
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。