[英]Reading from file and storing into 2D dynamically allocated array in C
我在這里搜索,但是發現的所有內容似乎都不適合我。 我正在一個項目上,正在嘗試實現以下功能:
read_from_file(*r, *col, fp);
\\ param * r,將要存儲新矩陣的行數的位置; \\ param * col將要存儲新矩陣的列數的位置; \\ param fp該文件,已經在程序主程序中以讀取模式打開,可以從矩陣中讀取該文件。
\\ retval必須p,指向新矩陣的指針,從文件中讀取。
現在,每個文件都類似:
..........
.......@..
.....@@@@.
.....@@@..
..........
..........
..........
..........
..........
..........
基本上,該程序必須可以選擇上載由空單元組成的沉淀區域,“。”,如果遇到障礙,則可以上載“ @”。 一些單元格也可以填滿“ *”。 這些“特殊字符”的定義也如下:
#define EMPTY '.'
#define FULL '*'
#define OBSTACLE '@'
代表沉積區域的矩陣必須是2D動態分配的數組。 我寫了一段有關評估行和列數的代碼,它工作得很好。 我在嘗試執行以下操作時遇到問題:在我在此處編寫的示例文件中,矩陣是10x10的矩陣,因此,一個矩陣為矩陣分配了足夠的空間:
char**p = malloc(row*sizeof(char*));
int i = 0;
for(i = 0; i < row; i++){
p[i] = malloc(columns*sizeof(char));
我想要完成的從文件讀取的操作是:
p[1][1] = '.';
p[1][2] = '.';
....
p[2][8] = '@';
等等。 我已經嘗試了很多方法,但是似乎沒有任何效果。 一旦我嘗試在文件上寫入此新矩陣,當我嘗試讀取輸出時,將顯示錯誤消息,提示文件已損壞。 有誰能夠幫助我?
我這樣嘗試過:
char*buffer = malloc(sizeof(char));
int k;
while(fgets(buffer, columns, fp) != NULL){
for(i = 0; i < row; i++){
k = 0;
for(j = 0; j < columns; j++){
if(j == col-1)
p[i][j] = buffer[columns - 1]; /* excluding ‘\0’ here */
else
p[i][j] = buffer[k++];
}
}
}
我什至嘗試這樣:
While((c = fgetc(fp))) != EOF){
for(i = 0; i < row; i++){
for(j=0; j< columns; j++){
p[i][j] = c;
}
}
}
提前致謝。
您如何嘗試從文件讀取? 我認為您應該檢查如何逐行讀取文件 。
您可以嘗試:
char**p = malloc(row*sizeof(char*));
char *line = NULL
size_t len = 0;
int i = 0;
while ((getline(&line, &len, fp)) != -1) {
p[i++] = strdup(line)
printf("%s", line);
}
我認為這應該可行,沒有在編譯時對其進行測試,但是我認為您有主意! 正如評論中的某人所說,小心getline! 它不是標准的C函數,使用它不能移植到非POSIX系統
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.