在调用之前初始化变量时 fgets 失败
fgets fails when a variable is initialized before the call
我有这段代码可以读取 chip8 rom 并打印出相应的指令:
int main() {
FILE *fp = fopen("./roms/IBMLogo.ch8", "rb");
uint8_t *code;
while(fgets(code, 3, fp)) {
disassemble_chip8(code);
}
return 0;
}
它工作得很好,我得到了我期望得到的输出。但是,当我添加变量初始化时:
int main() {
FILE *fp = fopen("./roms/IBMLogo.ch8", "rb");
uint8_t *code;
uint32_t hex_address = 0; // this line right here
while(fgets(code, 3, fp)) {
disassemble_chip8(code);
}
return 0;
}
fgets失败,没有进入循环。我试过调试这个,但我终生无法解决问题。这是我遗漏的 C 的一些随机行为吗?
“随机行为”是您的程序使用 fgets 读入 uint8_t *code
指向的内存。
问问自己,“代码指向什么?”
意识到答案是“我不知道,因为我没有将它设置为任何东西。”
而那是“随机”行为。编译器分配给 code
的堆栈内存或寄存器中的任何值都是正在使用的值。它是“随机的”,因为您不知道该值将是什么。
我有这段代码可以读取 chip8 rom 并打印出相应的指令:
int main() {
FILE *fp = fopen("./roms/IBMLogo.ch8", "rb");
uint8_t *code;
while(fgets(code, 3, fp)) {
disassemble_chip8(code);
}
return 0;
}
它工作得很好,我得到了我期望得到的输出。但是,当我添加变量初始化时:
int main() {
FILE *fp = fopen("./roms/IBMLogo.ch8", "rb");
uint8_t *code;
uint32_t hex_address = 0; // this line right here
while(fgets(code, 3, fp)) {
disassemble_chip8(code);
}
return 0;
}
fgets失败,没有进入循环。我试过调试这个,但我终生无法解决问题。这是我遗漏的 C 的一些随机行为吗?
“随机行为”是您的程序使用 fgets 读入 uint8_t *code
指向的内存。
问问自己,“代码指向什么?”
意识到答案是“我不知道,因为我没有将它设置为任何东西。”
而那是“随机”行为。编译器分配给 code
的堆栈内存或寄存器中的任何值都是正在使用的值。它是“随机的”,因为您不知道该值将是什么。