C语言中的二维数组菜单

C语言中的二维数组菜单,c,arrays,menu,2d,C,Arrays,Menu,2d,我的程序崩溃了 基本上,数据没有通过菜单选择的数组,我想知道是否有人可以检查一下,看看问题出在哪里 #include <stdio.h> #include <stdlib.h> void print_main_menu(char menu_items[5][10], int number_of_items) { int i; for (i = 0; i < number_of_items; i++) { printf("%s\n",

我的程序崩溃了

基本上,数据没有通过菜单选择的数组,我想知道是否有人可以检查一下,看看问题出在哪里

#include <stdio.h>
#include <stdlib.h>

void print_main_menu(char menu_items[5][10], int number_of_items) {
    int i;
    for (i = 0; i < number_of_items; i++) {
        printf("%s\n", menu_items[0][i]);
    }
}

int main () {
    char menu [5][10];
    menu [0][0] = "1 - Membership List";
    menu [0][1] = "2 - Waiting List";
    menu [0][2] = "3 - Committee List";
    menu [0][3] = "4 - Temporary List";
    menu [0][4] = "5 - Exit";

    /* 1 - Membership List */
    menu[1][0] = "1 - Whatever";
    menu[1][1] = "2 - Whatever";

    print_menu(menu, 5);

    getch();
}
#包括
#包括
无效打印主菜单(字符菜单项[5][10],整数项){
int i;
对于(i=0;i<项的数量;i++){
printf(“%s\n”,菜单项[0][i]);
}
}
int main(){
字符菜单[5][10];
菜单[0][0]=“1-会员名单”;
菜单[0][1]=“2-等待列表”;
菜单[0][2]=“3-委员会名单”;
菜单[0][3]=“4-临时列表”;
菜单[0][4]=“5-退出”;
/*1-成员名单*/
菜单[1][0]=“1-无论什么”;
菜单[1][1]=“2-任意”;
打印菜单(菜单,5);
getch();
}

嗯,您的主要问题是将字符串分配给单个字符。您需要将其更改为:

char * menu [5][10];                

我的意思是,您正在访问单个字符的位置,并试图在其中存储整个字符串。

首先:您将函数声明为
print\u main\u menu
,但您将其称为
print\u main
,但这应该会导致编译错误

第二:您错误地使用了二维数组,显然您将其用作C字符串的二维数组,但您将其声明为字符数组。 这将是正确的声明:

char* menu [5][10];
最后:许多数组索引没有初始化,这意味着它们可以指向任何地方,这很可能会产生分段错误并使应用程序崩溃


编辑:我也不确定是否可以像您这样将数组传递给函数。这样做很可能不是一个好主意。

首先,您应该如下定义数组:
char*menu[5][10]

作为参数而不是
char菜单项[5][10]
您应该使用
char*菜单项[5][10]


这应该可以解决您的问题。

上面的程序有很多错误。对于初学者,请更正main..from中的函数调用


print_menu()
print_main_menu()

修复了这个问题,但我仍然有同样的问题。感谢大家的快速回复,它现在正在运行。我只需要添加一个选择系统,我应该很好。你肯定可以将数组传递给函数,但这通常不是一个好主意,因为它真正做的是传递指向第一个元素的指针(例如:
menu
变成
&menu[0]
)。最好明确地这样做;例如,将
char*菜单项[5][10]
更改为
char*(*菜单项)[10]
。然而,由于
menu\u items
是非平凡的,因此最好定义一个数据结构来保存菜单项并传递它(或指向它的指针)。感谢您的精心设计,我有时尝试将数组传递给函数,但据我所知,从未成功过。我同意你的观点,将菜单封装在某种结构中。