返回函数指针数组

时间:2019-04-13 16:30:13

标签: c pointers

我有两个文件main.c和foo.c,我正在尝试将功能数组从一个文件复制到另一个文件。

我的问题是:仅复制第一项。

这是我的代码:

foo.c:

void foo1();
void foo2();
void foo3();
void foo4();
void foo5();
void foo6();
void foo7();

void (*myFuncs[7])() = {
    foo1,
    foo2,
    foo3,
    foo4,
    foo5,
    foo6,
    foo7
};

void* getMyFuncs(){
    return myFuncs;
}

main.c:

void (*things[7])();

void main(){
   memcpy(things, getMyFuncs(), sizeof(getMyFuncs()));
}

在调试模式下运行后,我检查了数组事物,仅复制了 foo1 指针。

所以,我的输出是:

void (*things[7])() = {
    foo1 (hex address here),
    0x00,
    0x00,
    0x00,
    0x00,
    0x00,
    0x00
};

我所期望的:

void (*things[7])() = {
    foo1 (hex address here),
    foo2 (hex address here),
    foo3 (hex address here),
    foo4 (hex address here),
    foo5 (hex address here),
    foo6 (hex address here),
    foo7 (hex address here)
};

为什么只复制第一项?

谢谢

1 个答案:

答案 0 :(得分:0)

我找到了解决方案,这是一个愚蠢的错误!

我的电话:

memcpy(things, getMyFuncs(), sizeof(getMyFuncs()));

是错误的,我不想复制getMyFuncs()的大小。

复制的写方法是通过获取函数数组的大小:

memcpy(things, getMyFuncs(), sizeof(things));