[英]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 層嵌套的{}
符號:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.