【问题标题】:Unable to access all elements of Array Structure无法访问数组结构的所有元素
【发布时间】:2014-03-26 06:06:50
【问题描述】:

我正在为我的菜单编写一个 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);
    }
}

【问题讨论】:

  • 请使用标题作为简短描述。你的问题除了你的代码之外什么都没有。添加一个文本你想做什么,你尝试了什么以及你得到了什么编译器错误或不当行为。不欢迎任何“请帮助我”。
  • @atul329,你欠我一杯啤酒,让我能读懂缩进。 :-)

标签: c embedded


【解决方案1】:

你的问题是你认为

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 是一个数组
  • 第二级,因为它包含结构
  • 第三级,因为每个结构都包含一个数组

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 2013-06-11
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    相关资源
    最近更新 更多