【问题标题】:How to execute a code in buffer?如何在缓冲区中执行代码?
【发布时间】:2013-12-24 11:25:55
【问题描述】:

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

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

有没有办法执行 printf 语句?

【问题讨论】:

  • 您必须创建自己的,因为它没有在 C 中动态执行语句的机制。而且缓冲区太小。
  • 如果通过interpreter 运行,您可以实现它。或者,如果您将解释器嵌入到您的应用中。
  • 或者以某种方式即时编译它?

标签: c runtime


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-12
    • 2011-02-08
    • 2023-03-25
    • 2016-02-19
    • 2011-07-13
    • 2021-08-17
    • 2017-04-17
    • 2014-10-05
    相关资源
    最近更新 更多