C 将字符串映射到函数

标签 c string shell dictionary function-pointers

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

int exec_if_built_in(char **args)

它接受一个字符串数组(第一个是命令,其余是参数)。对于非内置命令,我只使用类似 execvp 的东西,但是我需要找到一种方法将第一个字符串映射到一个函数。我正在考虑制作两个数组,一个是字符串,另一个是具有相应函数指针的数组。然而,由于这些函数中有许多是不同的(返回和接受不同的东西),这种方法是行不通的。我还考虑过创建一个具有名称属性和函数指针属性的结构数组,但是再次由于我将使用的函数的不同性质,这将行不通。

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

谢谢大家的帮助:)

最佳答案

I was thinking of making two arrays, one of strings, and another with their corresponding function pointers.

这是正确的做法。制作采用相同类型参数的包装函数*,然后从包装器内部调用“真实”函数。

如果您想“为风格赚取额外积分”,请按字母顺序对字符串数组进行排序,并对字符串数组使用二分查找。当两个数组变大时,这将使您节省几个 CPU 周期。


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

关于C 将字符串映射到函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12765899/

相关文章:

string - 用 Lua 匹配整个、精确的文本行

python - 用 Python 解析莎士比亚文本

php create_directory 权限被拒绝 : when attempting shell_exec script

c - 数组函数只返回第一个元素,我需要整个数组。请帮助

c - 这个神秘的 C 代码片段有什么作用?

c++ - 是否有适用于新 C++ 的 cfront 工具?

regex - 将 bash 正则表达式模式作为 awk 中更大的正则表达式模式的一部分传递

c - 实现重定向。 Unix 外壳。

java - 执行各种字符串操作的有效方法

ios - 将 Head 版本从 http 获取到 bundle 版本