
关于C语言的字符串问题
一个字符串是否可以转换为一个函数指针?比如有个函数intfun(),现在我定义一个串char*str="fun",再定义一个函数指针,int(*FUN)(),本来,正常的...
一个字符串是否可以转换为一个函数指针?
比如有个函数int fun(),现在我定义一个串char* str = "fun",再定义一个函数指针,int (*FUN)(),本来,正常的调用是FUN = fun,即可,但我现在的需求是能够将FUN = fun中的“fun”用字符串str来代替,该如何实现诶?
我的关键是函数fun并不是我预先定义好的,而是我后面加上去的,比如:
typedef void (*Fun)()
int main()
{
Fun fun[10];
char *str;
int i = 0;
for (i;i <10; i++)
{
str = value; //value是我已某种方式循环获得的函数名称,
//比如我是从某张表中获得的函数名称
fun[i] = str;
}
i = 0;
for (i; i <n; i++)
{
fun[i]();
}
} 展开
比如有个函数int fun(),现在我定义一个串char* str = "fun",再定义一个函数指针,int (*FUN)(),本来,正常的调用是FUN = fun,即可,但我现在的需求是能够将FUN = fun中的“fun”用字符串str来代替,该如何实现诶?
我的关键是函数fun并不是我预先定义好的,而是我后面加上去的,比如:
typedef void (*Fun)()
int main()
{
Fun fun[10];
char *str;
int i = 0;
for (i;i <10; i++)
{
str = value; //value是我已某种方式循环获得的函数名称,
//比如我是从某张表中获得的函数名称
fun[i] = str;
}
i = 0;
for (i; i <n; i++)
{
fun[i]();
}
} 展开
3个回答
展开全部
应该不可以,函数指针本质传递的是这个函数在内存中的起始地址,而字符串不可以弄。不过高级语言分配的时候,会自动建立一个叫做 符号表 的数据结构,里面有这个程序所有的声明标识符和其地址、大小等信息,你如果可以找到访问这个表的方法,就能实现你的这个想法了。不过我也只知道有这个东西,却不知道如何去访问,现在的知识还是太少了。
展开全部
char* str = "fun",就表示str是一个常量指针,指向是存储“fun”字符串的地址;
int (*FUN)(),表示FUN函数指针,FUN = fun,表示将FUN指向fun的地址;
综上,要实现你的目地,就要使FUN指向fun地址就ok,故str指向fun不就ok了么,
那么两种方法,1,定义str就让指向fun地址。void *str=fun;
2,给fun开辟FUN空间,讲fun地址赋给str
测试代码:
// 第一种
#include <stdio.h>
void fun()
{
printf("Test\n");
}
void (* FUN)();
int main()
{
void *str=fun;
FUN=str;
FUN();
}
第二种
#include <stdio.h>
void fun()
{
printf("Test\n");
}
void (* FUN)();
int main()
{
void *str;
str=(void *)malloc(sizeof(void *));
str=fun;
FUN=str;
FUN();
}
int (*FUN)(),表示FUN函数指针,FUN = fun,表示将FUN指向fun的地址;
综上,要实现你的目地,就要使FUN指向fun地址就ok,故str指向fun不就ok了么,
那么两种方法,1,定义str就让指向fun地址。void *str=fun;
2,给fun开辟FUN空间,讲fun地址赋给str
测试代码:
// 第一种
#include <stdio.h>
void fun()
{
printf("Test\n");
}
void (* FUN)();
int main()
{
void *str=fun;
FUN=str;
FUN();
}
第二种
#include <stdio.h>
void fun()
{
printf("Test\n");
}
void (* FUN)();
int main()
{
void *str;
str=(void *)malloc(sizeof(void *));
str=fun;
FUN=str;
FUN();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有2个变通的方法。
1个是:
另建一个函数,然后在这个函数中判断str的内容,如果是"fun03",那么返回fun03函数的地址。懂了没?
-------------------------------------------------------------------------------------------------------------------
那你学学GetProcAddress吧。自己百度
-------------------------------------------------------------------------------------------------------------------
还有,你以后用追问。不然我不舒服。
1个是:
另建一个函数,然后在这个函数中判断str的内容,如果是"fun03",那么返回fun03函数的地址。懂了没?
-------------------------------------------------------------------------------------------------------------------
那你学学GetProcAddress吧。自己百度
-------------------------------------------------------------------------------------------------------------------
还有,你以后用追问。不然我不舒服。
追问
哈哈
谢谢啊
动态库是个好办法,不过我是C,不是VC,所以只能用ldopen和ldsys函数了,
以及实现了,棒极了!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询