从指针到结构函数的C中执行函数
Executing function in C from pointer to function from a struct
我有一个包含字符串和函数指针的结构,我正在尝试根据要执行的给定字符串搜索特定函数。
我无法编译,因为我收到分配错误。我整天盯着这个看,感觉很烦,所以它很可能很简单。
我尝试了几种不同的方法来格式化结构,但我得到了分配错误的变体,但我能够将其缩小到 return 调用。
typedef struct builtin
{
char *str;
int (*func)(void);
} built_t;
/**
* exec_builtin - matches input to function and runs function
* @argv: null terminated string of args for program
* Return: 1 on success, 0 on exit, -1 on failure
*/
int exec_builtin(char **commands)
{
built_t built_ins[] = {
{"exit", &func_exit},
{NULL, NULL}
};
int i = 0, function;
for (i = 0; built_ins[i].str != NULL; i++)
if (strcmp(built_ins[i].str, commands[0]) == 0)
{
function = *(built_ins + i)->func;
return (function);
}
return (-1);
}
在你的初始化中,不要使用运算符的地址,只使用函数标识符(而不是 &func_exit,只是 func_exit)。
如果取消引用指针,请使用“.”运算符,如果您使用的是指针,请使用“->”运算符,即 *(built_ins + i).func 或 (built_ins + i)->func 或在本例中 built_ins[i].func
字段func是一个函数指针,如果你想调用那个函数,你应该把它当作一个函数:built_ins[i].func()
为什么将字符串数组传递给函数,但只使用第一个条目?
我有一个包含字符串和函数指针的结构,我正在尝试根据要执行的给定字符串搜索特定函数。 我无法编译,因为我收到分配错误。我整天盯着这个看,感觉很烦,所以它很可能很简单。 我尝试了几种不同的方法来格式化结构,但我得到了分配错误的变体,但我能够将其缩小到 return 调用。
typedef struct builtin
{
char *str;
int (*func)(void);
} built_t;
/**
* exec_builtin - matches input to function and runs function
* @argv: null terminated string of args for program
* Return: 1 on success, 0 on exit, -1 on failure
*/
int exec_builtin(char **commands)
{
built_t built_ins[] = {
{"exit", &func_exit},
{NULL, NULL}
};
int i = 0, function;
for (i = 0; built_ins[i].str != NULL; i++)
if (strcmp(built_ins[i].str, commands[0]) == 0)
{
function = *(built_ins + i)->func;
return (function);
}
return (-1);
}
在你的初始化中,不要使用运算符的地址,只使用函数标识符(而不是 &func_exit,只是 func_exit)。
如果取消引用指针,请使用“.”运算符,如果您使用的是指针,请使用“->”运算符,即 *(built_ins + i).func 或 (built_ins + i)->func 或在本例中 built_ins[i].func
字段func是一个函数指针,如果你想调用那个函数,你应该把它当作一个函数:built_ins[i].func()
为什么将字符串数组传递给函数,但只使用第一个条目?