What header should I include for memcpy and realloc?
Asked Answered
J

2

45

I am porting a project to the iPhone and it uses realloc and memcpy which are not found. What is the header to include?

It's a project mixing Objective C and C++ and I am starting to be lost.

Thanks in advance for your help!

Jiggle answered 17/2, 2010 at 19:21 Comment(0)
C
65

In C:

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

In C++, remove the .h and prefix with a c. In C++, they will be placed in the std namespace, but are also global.

Cullis answered 17/2, 2010 at 19:30 Comment(2)
You could use #ifdef __cplusplus / #else to automatically include the correct ones for either C or C++.Astarte
If you don't mind polluting the global namespace, string.h and stdlib.h work in C++ just as well and you can keep using realloc, memcpy instead of std::realloc, std::memcpy etc., which seems to be more in line with what the original poster wanted.Gutbucket
T
8

In C++ it's more idiomatic to use std::copy than C's memcpy, although the latter does work just as well. To get std::copy, you need to #include <algorithm>.

There's not a direct C++ equivalent to realloc, though.

Touchhole answered 17/2, 2010 at 19:48 Comment(2)
If I could mark this answer as not useful with a comment, I would do so because it is incorrect. As GMan said, realloc is found in <cstdlib>.Compassionate
I did not say that it is not possible to use the C standard library function realloc in C++ (since, of course, the C++ standard library includes the entirety of the C89 standard library). I said that there is not a new C++ standard library function that encompasses the functionality of realloc as std::copy does for memcpy. Although I suppose my intent is not obvious if my answer is read in isolation as opposed to in conjunction with the other, already accepted answer.Touchhole

© 2022 - 2024 — McMap. All rights reserved.