這個程序應該採用數組(在文件中)的數組num
和2d數組的名字(第一個,最後一個,最初)。但是,我不斷收到賽格錯誤,我不知道爲什麼。我所做的是分配內存,然後使用fscanf
獲取行數,並使用fgets
獲取名稱,同時將所有'\n'
更改爲'\0'
。然後,我使用strtok
將單獨的數組分成標記,我相信我可能在某處出錯。使用2d數組的malloc和strtok
編輯:現在我得到傳遞參數1的'strcpy'使整數指針沒有轉換。 我要怎麼解決這個問題
這是我的代碼:
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);
}
}
請正確格式化您的代碼。 –
每個名/姓都分配了num個字節。你確定名稱的長度應該與從文件中讀取的名字的數量相匹配嗎? – simonc
另外一個調試段錯誤的策略是在函數中加入額外的'return',直到段錯誤消失。最終你會發現segfault發生在哪一行。 –