gpt4 book ai didi

c - 从文件读取并存储到C中动态分配的二维数组中

转载 作者:行者123 更新时间:2023-11-30 16:36:58 25 4
gpt4 key购买 nike

我在这里搜索过,但我发现的内容似乎都不适合我。我正在开发一个项目,我正在尝试实现一个标题如下的函数:

read_from_file(*r, *col, fp);

\param *r,其中将存储新矩阵的行数;\param *col 将存储新矩阵的列数;\param fp 文件,已在程序主程序中以读取模式打开,在其中从矩阵读取。

\retval 必须为 p,指向新矩阵的指针,从文件中读取。

现在,每个文件都类似于:

..........
.......@..
.....@@@@.
.....@@@..
..........
..........
..........
..........
..........
..........

基本上,该程序必须具有上传沉降区域的选项,该沉降区域由空单元格“.”组成,如果有障碍,则为“@”。有些单元格也可以是完整的“*”。那些“特殊字符”也定义如下:

#define EMPTY '.'
#define FULL '*'
#define OBSTACLE '@'

表示沉降面积的矩阵必须是二维动态分配的数组。我写了一段关于行数和列数评估的代码,它工作得很好。我在尝试执行以下操作时遇到问题:在我此处编写的示例文件中,矩阵是 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;
}
}
}

提前致谢。

最佳答案

您如何尝试从文件中读取内容?我想你应该看看如何 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 系统

关于c - 从文件读取并存储到C中动态分配的二维数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48222191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com