Возвращаем массив указателей на функции - PullRequest
0 голосов
/ 13 апреля 2019

У меня есть два файла 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 голосов
/ 13 апреля 2019

Я нашел решение, это была глупая ошибка!

Моя строка:

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

неверна, я не хочу копировать размер getMyFuncs ().

Способ записи для копирования заключается в получении размера моего массива функций:

memcpy(things, getMyFuncs(), sizeof(things));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...