簡體   English   中英

無法訪問數組結構的所有元素

[英]Unable to access all elements of Array Structure

我正在為我的菜單編寫一個 GUI。 問題是,當我訪問 drawtext 函數時,只有當我使用訪問該函數時,才顯示 sub_menu 字符數組的第一個元素

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

你的問題是你認為

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

並繪制文字。 你最好有一個循環。 DRY(不要重復自己)。

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

字符串存儲在程序的常量區域中,它們包含一個終止零,因此您不必擔心它們的長度 (18)。 您所需要的只是結構中包含 5 個字符指針的數組。

至於初始化器,它需要 3 層嵌套的{}符號:

  • 第一級,因為 touch_menu 是一個數組
  • 第二級,因為它包含結構
  • 第 3 級,因為每個結構都包含一個數組

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM