无法访问Array Structure的所有元素

时间:2014-03-26 06:06:50

标签: c embedded

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

访问函数时,只显示了我的sub_menu char数组的第一个元素
        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功能时
        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);
    }
}

1 个答案:

答案 0 :(得分:0)

你的问题是你想的

char *sub_Menu[5][18];

是指向5x18字符数组的指针。但实际上它是一个5x18的char指针数组。

像这样更改结构类型:

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
};

绘制文字。循环你会好一些。干(不要重复自己)。

drawText(38, 240, a->sub_Menu[2], 0);

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

对于初始化程序,它需要3个级别的嵌套{}符号:

  • 第一级因为touch_menu是一个数组
  • 第二级,因为它包含结构
  • 第3级,因为每个结构包含一个数组