gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:40:24 24 4
gpt4 key购买 nike

我正在为我的菜单编写一个 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函数时
        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 指针数组。

像这样更改你的结构类型:

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

关于c - 无法访问数组结构的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22652772/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com