gpt4 book ai didi

c - 在C中逐字符读取文件

转载 作者:太空狗 更新时间:2023-10-29 16:23:41 25 4
gpt4 key购买 nike

我正在用 C 编写 BF 解释器,但在读取文件时遇到了问题。我曾经使用 scanf为了读取第一个字符串,但是你的 BF 代码中不能有空格或注释。

现在这就是我所拥有的。

char *readFile(char *fileName)
{
FILE *file;
char *code = malloc(1000 * sizeof(char));
file = fopen(fileName, "r");
do
{
*code++ = (char)fgetc(file);

} while(*code != EOF);
return code;
}

我知道问题出在我如何将文件中的下一个字符分配给代码指针,但我不确定那是什么。
我缺乏指针知识,这是本练习的重点。解释器工作正常,全部使用指针,我只是在读取文件时遇到问题。

(稍后我将只实现将 +-><[]., 读取到文件中,如果有人有好的方法,请告诉我!)

最佳答案

您的代码有很多问题:

char *readFile(char *fileName)
{
FILE *file;
char *code = malloc(1000 * sizeof(char));
file = fopen(fileName, "r");
do
{
*code++ = (char)fgetc(file);

} while(*code != EOF);
return code;
}
  1. 如果文件大于 1,000 字节怎么办?
  2. 每次读取一个字符时,您都在增加 code,并将 code 返回给调用者(即使它不再指向字符的第一个字节malloc 返回的内存块)。
  3. 您正在将 fgetc(file) 的结果转换为 char。在将结果转换为 char 之前,您需要检查 EOF

维护 malloc 返回的原始指针很重要,这样您就可以稍后释放它。如果我们忽略文件大小,我们仍然可以通过以下方式实现这一点:

char *readFile(char *fileName)
{
FILE *file = fopen(fileName, "r");
char *code;
size_t n = 0;
int c;

if (file == NULL)
return NULL; //could not open file

code = malloc(1000);

while ((c = fgetc(file)) != EOF)
{
code[n++] = (char) c;
}

// don't forget to terminate with the null character
code[n] = '\0';

return code;
}

有多种系统调用可以为您提供文件的大小;一个常见的是 stat .

关于c - 在C中逐字符读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4823177/

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