C-如果未在函数范围中声明,则无法索引字符串数组

C-如果未在函数范围中声明,则无法索引字符串数组,c,operating-system,kernel,C,Operating System,Kernel,我正在开发我的内核,到目前为止还不错。然而,有一个(可能是微不足道的)问题。如果字符串数组不是在我的函数范围内声明的,而是在全局范围内声明的,我就不能为它编制索引。这就是错误所在: unsigned char *exception_messages[32] = { "Division by Zero Exception!\n\r", "Debug Exception!\n\r", .... "Reserved Exception!\n\r" "Reserv

我正在开发我的内核,到目前为止还不错。然而,有一个(可能是微不足道的)问题。如果字符串数组不是在我的函数范围内声明的,而是在全局范围内声明的,我就不能为它编制索引。这就是错误所在:

unsigned char *exception_messages[32] = {
    "Division by Zero Exception!\n\r",
    "Debug Exception!\n\r",
    ....
    "Reserved Exception!\n\r"
    "Reserved Exception!\n\r"
};


void fault_handler(struct regs *r) {
    if(r->int_no < 32) {
        int a = r->int_no;
        char* str = exception_messages[a]; // no matter what the value of 'a' is, I only get "S " printed onto the screen.
        puti(a);
        puts("\n\r");
        puts(str);
        puts("System Halted!\n\r");
        for (;;);
    }
}
unsigned char*异常消息[32]={
“零除异常!\n\r”,
“调试异常!\n\r”,
....
“保留异常!\n\r”
“保留异常!\n\r”
};
无效错误处理程序(结构regs*r){
如果(r->int_no<32){
INTA=r->int\U编号;
char*str=exception_messages[a];//无论“a”的值是多少,我只会在屏幕上打印“S”。
普提(a);
放置(“\n\r”);
put(str);
puts(“系统已停止!\n\r”);
对于(;);
}
}

如果我在函数本身中声明数组,它就可以正常工作,但我不想每次用户按下一个键或什么的时候都将这么多东西推到堆栈上

puts
功能是否正常工作?文字字符串在其他情况下工作?在(可能)不相关的注释中,它通常是
“\r\n”
,而不是相反。我觉得
“\n\r”
更安全,因为知道我的驱动程序的实现。也许正是我写在纸上的方式导致了这一点。我现在懒得更改它。你确定数组在全局声明时可以在内核内存空间中访问吗?OMG谢谢@HansPetterTaugbølKragset。我现在加载20个扇区,而不是10个扇区,我可以看到字符串了!非常感谢。而
puts
功能是否正常工作?文字字符串在其他情况下工作?在(可能)不相关的注释中,它通常是
“\r\n”
,而不是相反。我觉得
“\n\r”
更安全,因为知道我的驱动程序的实现。也许正是我写在纸上的方式导致了这一点。我现在懒得更改它。你确定数组在全局声明时可以在内核内存空间中访问吗?OMG谢谢@HansPetterTaugbølKragset。我现在加载20个扇区,而不是10个扇区,我可以看到字符串了!非常感谢。