gpt4 book ai didi

c - 在c中如何调用一个函数而不直接调用它

转载 作者:行者123 更新时间:2023-11-30 16:26:11 25 4
gpt4 key购买 nike

我正在尝试直接调用一个函数。所以,我使用函数指针和缓冲区溢出。我得到了我想要的,但是当我调试程序时,我遇到了段错误。

有没有办法在不出现段错误的情况下获得准确的结果?

#include <stdio.h>

void hello()
{
printf("hello()!\n");
}

void first()
{
void (*array[1])();
array[8] = &hello;
printf("you are first()!\n");
}

int main (int argc, char *argv[])
{
first();
return 0;
}

我得到的输出是;

你是第一()!

你好()!

注意:我使用 Code:Blocks 作为平台,使用 GDB/CDB 作为调试器

最佳答案

您正在声明一个大小为 1 的数组,并尝试为其第 9 个(数组索引从 0 开始)索引分配一些内容。 array[8] 没有在这里分配。这就是段错误的原因。要解决这个问题,您应该将 hello 分配给 array 大小范围内的索引。就您而言,

void first()
{
void (*array[1])();
array[0] = &hello;
printf("you are first()!\n");
}

就能解决问题了。上面的代码将打印 hello()! 函数。为此,您还应该调用 hello 函数。

void first()
{
void (*array[1])();
array[0] = &hello;
printf("you are first()!\n");
array[0]();
}

关于c - 在c中如何调用一个函数而不直接调用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53144532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com