如何在缓冲区中执行代码?

时间:2013-12-24 11:25:56

标签: c runtime

我想知道我是否可以执行存储在缓冲区中的代码。例如:

char buffer[20] = "printf(\"Stackoverflow\");";

有没有办法执行printf语句?

1 个答案:

答案 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