从C中的字符串调用函数

时间:2011-05-03 21:04:42

标签: c

在C中,如何通过将其名称作为字符串来调用函数?我有这个:

int main(int argc, const char *argv[])
{
    char* events[] = {
        "test",
        "test2"
    };

    int i = 0;
    for (; i < 2; ++i){
        char* event = events[i];
        // call function with name of "event"
    }
    return 0;
}

5 个答案:

答案 0 :(得分:5)

你可以做到,但没有太多的内置帮助。

typedef struct { 
    char *event_name;
    void (*handler)();
} event_handler;

然后搜索event_handler的数组(或其他),当找到正确的名称时,调用相关的函数。

答案 1 :(得分:4)

没有标准的方法可以做到这一点。实际上,你有时可以使用平台特定的东西(例如* {nix上的dlopen)来做这件事,但这不是一个好主意。如果你真的想做这样的事情,你应该使用反思语言。

设置字符串和函数指针的结构表,以用作函数的查找。

答案 2 :(得分:1)

如果要调用使用动态链接器链接的函数(或者如果您的程序是使用-rdynamic编译的),则可以使用dlsym()来获取函数指针的地址并调用这一点。

如果你想根据给定字符串的内容调用一个函数,你可以使用上面的函数,或者你可以用一个结构内部的函数指针包装一个常量字符串并调用它们。

答案 3 :(得分:0)

因为你的数组只有2个项目......我的noob方式=)

if ( strcmp(event, "function1") == 0 ) {
  function1();
} else if { strcmp(event, "function2") == 0 ) {
  function2();
}

答案 4 :(得分:0)

将输入字符串与已知函数名称进行比较。

如果字符串X ...调用函数X