使用 C,我試圖從 .txt 檔案中逐行讀取,然后將每一行放入一個陣列中。每行最多 200 個字符,陣列可以存盤,比如說 50 行。如果行數超過50行,我想動態分配兩倍的記憶體,依此類推,直到足夠為止。如果我將 if{...} 部分放在 while 回圈之外,它似乎可以作業,但是一旦我在回圈內部使用它,它就不起作用。我將不勝感激任何幫助。
FILE *fp=fopen(file,"r");
int idx=0;
int row=50;
int col=300;
char temp[row][col];
while (fgets(temp[idx],col,fp)){
if (idx == row) {
char **new = malloc(2 * row * sizeof(char *));
for (int j = 0; j < row; j ) {
new[j] = (char *) malloc(col * sizeof(char) 1);
}
for (int i = 0; i < row; i ) {
for (int j = 0; j < (col 1); j ) {
new[i][j] = temp[i][j];
}
}
row = 2 * row;
**temp = **new;
free(new);
}
idx ;
}
fclose(fp);
uj5u.com熱心網友回復:
您不能更改本地陣列的維度(此處temp[row][col])。相反,您需要保留一個指向此類陣列的指標。在下面的代碼中,我使用一個temp陣列來為 保留一行fgets,然后立即將其復制到動態分配的存盤中(arr是二維行陣列):
FILE *fp=fopen(file,"r");
int idx=0;
int row=50;
int col=300;
char temp[col];
char **arr = malloc(row*sizeof(char*));
while (fgets(temp,col,fp)){
if (idx == row) {
char **new = realloc(arr, 2 * row * sizeof(char *));
if(!new) abort();
arr = new;
row *= 2;
}
arr[idx ] = strdup(temp);
}
fclose(fp);
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/364044.html
上一篇:檢查陣列中是否已經給出了數字
