可能重复:
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));
}
这也无效。
答案 0 :(得分:3)
阅读duplicate,你会找到答案。
但是,我想补充说,这是因为对程序运作方式的误解。这些函数位于内存中的地址。字符串不是地址。代码中的函数名称与其地址同义。在运行时,拥有一个字符串实际上只是指向一个带有字符的内存中的某个位置。这与编译时完成的任何事情无关,如函数名称。
某些语言包含有关程序的元数据,这意味着它们执行在运行时携带有关函数,名称,参数等的信息。 C ++不是这些语言之一。
这就是为什么大多数答案将是对这种元数据的一种模拟:函数将被存储,并且在运行时您可以使用字符串来查看表。
答案 1 :(得分:2)
您无法在C中将字符串转换为函数指针。您必须检查字符串的内容以确定要使用的函数。
答案 2 :(得分:2)
实际上,如果函数是extern
,你能不能用一些超级邪恶的动态加载器技巧来做到这一点?
答案 3 :(得分:0)
C中的字符串是指向字符数组的指针,函数指针是指向某些可执行机器代码的指针。你可以通过一个简单的类型转换将一个转换为另一个,它们是完全不同的东西。