从文件读取并存储到C

时间:2018-01-12 08:23:57

标签: c arrays file matrix

我在这里搜索,但我发现的任何东西似乎都对我有用。我正在研究一个项目,并且我正在尝试实现一个标题如下的函数:

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;
                   }
             }
       }

提前致谢。

1 个答案:

答案 0 :(得分:0)

你是如何尝试从文件中读取的?我想你应该查看read a file line by line的方式。

您可以尝试:

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系统