在调用之前初始化变量时 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 的堆栈内存或寄存器中的任何值都是正在使用的值。它是“随机的”,因为您不知道该值将是什么。