簡體   English   中英

從文件讀取並將其存儲到C中的2D動態分配的數組中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM