调试器手表中的数组为空

Array is empty in debugger watch

当我查看调试器手表时,断点位于 _rendercommand 仅包含 0x00。 这是用于 AVR 处理器。

int main(){
    char hello[] = "Hello";
    gfx_put_string(5, hello);
}

void gfx_put_string(int length, char* characters){
    char command[length+3];
    command[0] = 0x00; //cmd
    command[1] = 0x06; //cmd
    for (int i=0; i<length; i++){
        command[i+2] = characters[i];
    }
    command[length+2] = 0x00; //end with null
    _render(length+3, command);
}

希望它包含 0x00, 0x06, H, e, l, l, o, 0x00。我的代码有什么问题?我该如何解决?

编辑:建议的修复方法是将数组中的第一个字符更改为不是 0x00(空),但没有更改。优化已关闭。 XC8 None (-O0)

虽然在内存中找到了它(?)

所以问题是 command 数组的长度可变,当我将长度设置为 const 时,一切都按预期进行。最终代码如下:

void gfx_put_string(const int length, char* characters){
    char command[length+3];
    command[0] = 0x00;
    command[1] = 0x06; //cmd
    
    for (int i=0; i<length; i++){
        command[i+2] = characters[i];
    }
    command[length+2] = 0x00; //end with null

   _render(length+3, command);
}