gpt4 book ai didi

c - 使用 read 将文件中的文本读取到 C 中的矩阵中

转载 作者:行者123 更新时间:2023-11-30 16:42:10 24 4
gpt4 key购买 nike

我目前正在尝试解决项目期间遇到的问题。我必须将文件( map )的内容读入矩阵,但第一行包含 4 个单独的字符:

  1. 行数
  2. 空字符的代表
  3. 障碍物角色的代表
  4. 完整角色的代表。我需要将这些输入到一个数组中。

代码:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include "head.h"

#define BUF_S 4096

char **ft_build_martrix(char *str, int *pr, int *pc, char *blocks)
{
int fd;
int ret;
int ret2;
int j;
char *res[BUF_S + 1];

j = 0;
fd = open(str, O_RDONLY);
if (fd == -1)
{
ft_putstr("map error");
}
ret2 = read(fd, blocks, 4); //take the first row out and put it into the array
ret = read(fd, res, BUFF_S); //read the file's content into the matrix
res[ret][0] = '\0';
*pr = blocks[0] - '0'; // give the number of rows to the r variable that is declared in main and passed as argument, I think that's the equivalent of the $r in c++ ?
blocks[0] = blocks[1]; // delete the
blocks[1] = blocks[2]; // first character
blocks[2] = blocks[3]; // that is already in *pr
while (res[1][j] != '\n')
j++;
*pc = j; // get the number of column
return (res);
}

最佳答案

您正在返回指向局部变量的指针。从函数返回后,局部变量将从作用域中删除(它们的生命周期已结束),因此访问此地址(不再属于您)具有未定义的行为。

这也是指向数组的指针的声明

char * res[BUF_S + 1];

+---+ +---+
| * |--------->| | res[0][0] (*ret)[0]
+---+ +---+
res | | res[0][1]
+---+
| | ...
+---+
| | res[0][BUF_S + 1 - 1]
+---+

如果应用此操作

res[ret][0] = '\0';

使用 ret != 0 您正在调用未定义的行为。

<小时/>

你必须像这样声明它(指针到指针到字符)

char ** res = malloc(sizeof(char*) * X);  // Where X is number of rows

每一行都分开

for (int i = 0; i < X; i++)
{
res[i] = malloc(BUF_S + 1);
}

然后您可以访问不同的“行”(最大 X-1X 等会再次导致访问越界和未定义的行为)。

然后您将释放内存。

关于c - 使用 read 将文件中的文本读取到 C 中的矩阵中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45956403/

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