C 无法访问数组结构的所有元素

C 无法访问数组结构的所有元素,c,embedded,C,Embedded,我正在为菜单编写GUI。问题在于,当我访问drawtext函数时,当我使用 drawText(38,195,*a->sub_Menu[1],0); drawText(38,240, a->sub_Menu[2],0); drawText(38,285, a->sub_Menu[3],0); drawText(38,330, a->sub_Menu[4],0); 其余的框显示为空白。 当我尝试使用

我正在为菜单编写GUI。问题在于,当我访问drawtext函数时,当我使用

        drawText(38,195,*a->sub_Menu[1],0);
        drawText(38,240, a->sub_Menu[2],0);
        drawText(38,285, a->sub_Menu[3],0);
        drawText(38,330, a->sub_Menu[4],0);
其余的框显示为空白。 当我尝试使用

        drawText(38,195,*a->sub_Menu[1],0);
        drawText(38,240,*a->sub_Menu[2],0);
        drawText(38,285,*a->sub_Menu[3],0);
        drawText(38,330,*a->sub_Menu[4],0);
程序编译并运行,但只要我点击菜单上的“设置”按钮,程序就会崩溃,说myprogram.exe已停止工作。 我不知道问题出在哪里,因为我对编码还不熟悉

    typedef struct {
    short startXPos;
    short startYPos;
    short height;
    short width;
    unsigned int c;
    char *sub_Menu[5][18];
} menu, *ptr_Menu;

ptr_Menu a;
char sub_Menu1[5][18] = {"Big Font", "5 channel", "7 channel", "12 channel", "Alarm"};
menu touch_menu[10] = {30, 365, 45, 100, 5, &sub_Menu1};

void drawMenu(short b)
{
    int k = 0;
    if (b == 0) {
        a = &touch_menu[0];
        for (k=0; k<a->c; k++) {
            setColor(GREY);
            drawRectangle(a->startXPos, a->startYPos - (k+1)*a->height,a->width,a->height);
        }
        setColor(CYAN);
        drawText(38,150,*a->sub_Menu[0],0);
        drawText(38,195,*a->sub_Menu[1],0);
        drawText(38,240,*a->sub_Menu[2],0);
        drawText(38,285,*a->sub_Menu[3],0);
        drawText(38,330,*a->sub_Menu[4],0);
    }
}
typedef结构{
短startXPos;
短星型;
矮;
短宽度;
无符号整数c;
字符*子菜单[5][18];
}菜单,*ptr_菜单;
ptr_菜单a;
char sub_Menu1[5][18]={“大字体”、“5通道”、“7通道”、“12通道”、“报警”};
菜单触摸菜单[10]={30、365、45、100、5和sub_菜单1};
无效绘图菜单(短b)
{
int k=0;
如果(b==0){
a=&触摸菜单[0];
对于(k=0;kc;k++){
设置颜色(灰色);
绘图矩形(a->startXPos,a->startYPos-(k+1)*a->height,a->width,a->height);
}
色(青色);
drawText(38150,*a->子菜单[0],0);
drawText(38195,*a->子菜单[1],0);
drawText(38240,*a->子菜单[2],0);
drawText(38285,*a->子菜单[3],0);
drawText(38330,*a->子菜单[4],0);
}
}

你的问题在于你认为

char *sub_Menu[5][18];
是指向5x18字符数组的指针。但实际上它是一个5x18字符指针数组

按如下方式更改结构类型:

char *sub_Menu[5];
以及初始化:

menu touch_menu[10] = {
    { 30, 365, 45, 100, 5, { "Big Font", "5 channel", "7 channel", "12 channel", "Alarm" } },
    // remaining 9 menu data comes here
};
并绘制文本。你最好打个圈。擦干(不要重复)

字符串存储在程序的常量区域中,它们包含一个终止零,因此您不必担心它们的长度(18)。您只需要在结构中包含一个由5个字符组成的指针数组

对于初始值设定项,它需要3级嵌套的
{}
符号:

  • 第一级,因为触摸菜单是一个数组
  • 第二级,因为它包含结构
  • 第三级,因为每个结构包含一个数组

请使用标题进行简短描述。您的问题缺少除代码之外的所有内容。添加一个文本,说明您想做什么,尝试了什么,以及您遇到了什么编译器错误或不当行为。任何“请帮帮我”都是不受欢迎的。@atul329,你欠我一杯啤酒作为报酬。:-)
drawText(38, 240, a->sub_Menu[2], 0);