我想知道我是否可以执行存储在缓冲区中的代码。例如:
char buffer[20] = "printf(\"Stackoverflow\");";
有没有办法执行printf语句?
答案 0 :(得分:4)
C中没有eval
- 类似的构造,就像一些所谓的脚本语言一样。由于C通常被编译为机器代码而不是在运行时解释,因此实现这些功能需要一个带有一些C编译器或C解释器的平台才能使程序运行。
您可以查看以下问题:Is there an interpreter for C?并检查其中的链接或搜索C口译员。
只要您想要执行的字符串在编译时是已知的(即您根据某些输入不创建它们),您可以使用函数指针:
void print_hello(void) {
puts("Hello, world!");
}
void print_goodbye(void) {
puts("Goodbye.");
}
int main(void) {
void (*printer)(void) = print_hello;
printer();
printer = print_goodbye;
printer();
return 0;
}
您可以将printer
设置为任何函数的地址(具有兼容类型),因此您无需在编译时知道最终将调用哪个函数。
HTH