如何将字符串转换为C中的函数指针?

时间:2009-08-18 10:15:01

标签: c function pointers

  

可能重复:
  call a function named in a string variable in c
  Dynamically invoking any function by passing function name as string

我有某些功能..比如说,

double fA1B1C1( .. ) {
         ...
}

double fA2B2C3( .. ) {
         ...
}

double (*fptr)( .. );

fptr myfunc;

这些功能已经定义。

因此当用户输入字符串“A2B2C2”时,它进入一个变量并转换为“fA2B2C2”

myfunc = formatted_string; // DOES NOT WORK

但上述语法不起作用。甚至对它进行类型转换也不起作用。

myfunc = (fptr) formatted_string // DOES NOT WORK

但如果我将其硬编码为

myfunc = fA2B2C2(或)myfunc = &fA2B2C2,效果很好。

我哪里错了?

EDIT ::

I tried creating a hash table and a lookup function. Like

create_hashEntry(hashtable, string, formatted_string);
// string = "A1B1C1; formatted_string = "fA1B1C1"

然后是查找功能

myfunc lookup_func(char *string) {
       return(get_hashEntry(hahstable, string));
}

这也无效。

4 个答案:

答案 0 :(得分:3)

阅读duplicate,你会找到答案。

但是,我想补充说,这是因为对程序运作方式的误解。

这些函数位于内存中的地址。字符串不是地址。代码中的函数名称与其地址同义。在运行时,拥有一个字符串实际上只是指向一个带有字符的内存中的某个位置。这与编译时完成的任何事情无关,如函数名称。

某些语言包含有关程序的元数据,这意味着它们执行在运行时携带有关函数,名称,参数等的信息。 C ++不是这些语言之一。

这就是为什么大多数答案将是对这种元数据的一种模拟:函数将被存储,并且在运行时您可以使用字符串来查看表。

答案 1 :(得分:2)

您无法在C中将字符串转换为函数指针。您必须检查字符串的内容以确定要使用的函数。

答案 2 :(得分:2)

实际上,如果函数是extern,你能不能用一些超级邪恶的动态加载器技巧来做到这一点?

答案 3 :(得分:0)

C中的字符串是指向字符数组的指针,函数指针是指向某些可执行机器代码的指针。你可以通过一个简单的类型转换将一个转换为另一个,它们是完全不同的东西。