我目前有一个typedef指针函数,它不会指向任何导致分段错误(核心转储)的东西。我试图想出一个解决方案来避免它,但目前还没有想到。函数指针指向什么 - 我如何避免这种情况?
我的代码:
typedef void (*MenuFunction)(System*);
int main(int argc, char ** argv)
{
...
/* While loop for my menu */
while(1)
{
printf("Main Menu\n");
printf("%s\n", menu[0].text);
printf("%s\n", menu[1].text);
printf("%s\n", menu[2].text);
printf("Select your option (1-3): ");
(*getMenuChoice(menu))(&system);
}
}
/* Function that points to the menu function */
MenuFunction getMenuChoice(MenuItem * menu)
{
MenuFunction function = NULL;
char select[50];
fgets(select, 50, stdin);
if(select[strlen(select)-1] == '\n')
{
switch(select[0])
{
case '1':
function = menu[0].function;
break;
case '2':
function = menu[1].function;
break;
case '3':
function = menu[2].function;
exit(0);
break;
default:
printf("Invalid option\n");
}
}
else
{
readRestOfLine();
printf("Error: buffer overflow. Please try again, entering less data");
}
return function;
}
编辑:
现在,我想出了一个解决方案是创建一个什么也没有的功能,所以我可以有指向一些功能。我不认为这是理想的,但它会在短期内完成。
void skip()
{ }
它是在建设吗? – MayurK
也许你应该在使用之前检查'getMenuChoice'返回的内容?当你有一个可以返回空指针的函数时,总是一件好事。 –
这需要[mcve]。 – Yunnosch