C将字符串映射到函数

时间:2012-10-07 03:29:48

标签: c string shell map function-pointers

所以,我正在制作Unix minishell,并且遇到了障碍。我需要能够执行内置函数,所以我创建了一个函数:

int exec_if_built_in(char **args)

它需要一个字符串数组(第一个是命令,其余是参数)。对于非内置命令,我只使用像execvp这样的东西,但是我需要找到一种方法将第一个字符串映射到一个函数。我正在考虑制作两个数组,一个是字符串,另一个是相应的函数指针。但是,由于这些功能中的许多功能都不同(返回并接受不同的东西),因此这种方法不起作用。我还想过使用name属性和函数指针属性创建一个结构数组,但是由于我将要使用的函数的性质不同,这也是行不通的。

那么,基于字符串输入执行函数的最佳方法是什么?如何将字符串映射到某个函数?我对函数指针不太熟悉,所以我可能会遗漏一些东西。

谢谢你们的帮助:)

2 个答案:

答案 0 :(得分:3)

  

我正在考虑制作两个数组,一个是字符串,另一个是相应的函数指针。

这是正确的方法。创建包含相同类型 * 参数的包装函数,然后从包装器中调用“真实”函数。

如果您想“为风格赚取额外的积分”,请按字母顺序对字符串数组进行排序,并对字符串数组使用二进制搜索。这将使您在两个阵列变大时节省一些CPU周期。


* 也许您可以使用char **,因为这就是您exec_if_built_in所需要的。

答案 1 :(得分:1)

如果您的案例变得多样化以至于表格驱动方法不合适,那么if / else-if级联可能是最佳解决方案。

if(!strcmp(args[0], "cat")) {
    /* cat a file */
} else if(!strcmp(args[0], "dog")) {
    /* dog a file */
} else if(!strcmp(args[0], "echo")) {
    /* create an echo chamber */
} ...