Какой заголовок я должен включить для memcpy и realloc?

Я переношу проект на iPhone, и он использует realloc и memcpy, которые не найдены. Какой заголовок включить?

Это проект, смешивающий Objective C и C++, и я начинаю теряться.

Заранее спасибо за вашу помощь!


person AP.    schedule 17.02.2010    source источник


Ответы (2)


In C:

#include <string.h> // memcpy
#include <stdlib.h> //realloc

В C++ удалите .h и префикс c. В C++ они будут помещены в пространство имен std, но также являются глобальными.

person GManNickG    schedule 17.02.2010
comment
Вы можете использовать #ifdef __cplusplus/#else для автоматического включения правильных вариантов для C или C++. - person cp.engr; 26.01.2017
comment
Если вы не возражаете против загрязнения глобального пространства имен, string.h и stdlib.h работают в C++ так же хорошо, и вы можете продолжать использовать realloc, memcpy вместо std::realloc, std::memcpy и т. д., что, кажется, больше соответствует тому, что хотел исходный постер. - person tobi_s; 10.10.2018

В C++ более идиоматично использовать std::copy, чем memcpy в C, хотя последний работает так же хорошо. Чтобы получить std::copy, вам нужно #include <algorithm>.

Однако прямого C++ эквивалента realloc нет.

person Tyler McHenry    schedule 17.02.2010
comment
Если бы я мог пометить этот ответ как бесполезный с комментарием, я бы сделал это, потому что он неверен. Как сказал GMan, realloc находится в ‹cstdlib›. - person David Harris; 18.02.2010
comment
Я не говорил, что невозможно использовать стандартную библиотечную функцию C realloc в C++ (поскольку, конечно, стандартная библиотека C++ включает в себя всю стандартную библиотеку C89). Я сказал, что не существует новой стандартной библиотечной функции C++, которая включает в себя функциональность realloc, как std::copy для memcpy. Хотя я полагаю, что мое намерение не очевидно, если мой ответ читается изолированно, а не в сочетании с другим, уже принятым ответом. - person Tyler McHenry; 18.02.2010