gpt4 book ai didi

C - 读取文件并将内容写入数组,一次一个字符

转载 作者:行者123 更新时间:2023-11-30 15:34:23 25 4
gpt4 key购买 nike

我正在尝试学习仿真,同时重新学习 C(我在大学学过它,但最近没有做太多事情)。我正在编写一个chip8模拟器,但在将游戏加载到模拟器内存​​中时遇到问题。在我看来,问题是我没有正确使用 fopen(),并且我尝试创建的文件流没有找到该文件,或者我只是在实现中做了一些不正确的事情。

void loadGame(char* name) {
//Use fopen to read the program into memory, this loop will use the stream
FILE* game = fopen(name, "r"); //Open the game file as a stream.
unsigned int maxGameSize = 3584; //The max game size available 0x200 - 0xFFF
char gameBuffer[maxGameSize]; //The buffer that the game will be temporarily loaded into.

if (game == NULL) { //THIS IS WHERE THE ERROR HAPPENS. game does == NULL
fprintf(stderr, "The game either can't be opened or doesn't exist!\n");
exit(1);
} else {
while (!feof(game)) {
if (fgets(gameBuffer, maxGameSize, game) == NULL) { //load the file into the buffer.
break; //Reached the EOF
}
}

//Now load the game into the memory.
int counter = 0;
while (counter < maxGameSize) {
memory[counter+512] = gameBuffer[counter];
counter++;
}
}

fclose(game);
}

我在发生逻辑错误的行上用全部大写的注释,这样它就会脱颖而出。

这是我的主要方法,供引用。我的 pong ROM 与此编译代码位于同一目录中。

int main(int argc, char **argv) {

setupGraphics(); //A stub for now
setupInput(); //Another stub for now.
initialize(); //Yet another stub.

loadGame("PONG");
}

我很欣赏任何人可能有的见解!让我知道我是否应该在任何地方添加或更具描述性。

编辑:

我想我是用 MrZebra 的信息得到的!我想发布我的答案,我相信它正在按我的意愿工作。这是我的新 loadGame() 方法。

void loadGame(char* name) {
unsigned int maxGameSize = 3584; //This is how many 8-bit cells is available in the memory.
char gameBuffer[maxGameSize]; //Temporary buffer to read game into from file.

FILE* game = fopen(name, "rb");

if (game == NULL) {
perror("Failed to open game.\n");
} else {
printf("Game found.\n");
}

fread(gameBuffer, sizeof(char), maxGameSize, game); //Read file into temp buffer
fclose(game);

//Now load the game into the memory.
int counter = 0;
while (counter < maxGameSize) {
memory[counter+512] = gameBuffer[counter];
counter++;
}
}

最佳答案

它看起来像一个简单的“找不到文件”或“访问被拒绝”。仔细检查可执行文件是否确实位于您认为的位置 - 根据您的构建环境,它可能位于\Debug 子目录或类似的目录下。

此外,我猜测您的数据是一个二进制文件 - fgets() 用于读取文本,您需要 fread(),并且您应该在二进制模式“rb”

关于C - 读取文件并将内容写入数组,一次一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23315323/

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