# Copying data from ptr returned from ccall to julia data structure

**URL:** https://discourse.julialang.org/t/copying-data-from-ptr-returned-from-ccall-to-julia-data-structure/13948
**Category:** General Usage
**Tags:** ccall
**Created:** [August 23, 2018, 3:44pm UTC](https://discourse.julialang.org/t/copying-data-from-ptr-returned-from-ccall-to-julia-data-structure/13948 "2018-08-23T15:44:58Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![r\_v](https://avatars.discourse-cdn.com/v4/letter/r/7993a0/32.png) [@r\_v](https://discourse.julialang.org/u/r_v)
#### Post date: [August 23, 2018, 3:44pm UTC](https://discourse.julialang.org/t/copying-data-from-ptr-returned-from-ccall-to-julia-data-structure/13948/1 "2018-08-23T15:44:58Z")

</div>

I am trying to use an API that allocates memory and fills it out and passes data to the caller (and the caller must call another function in the API when done with the data to free the memory). I am not sure how to copy the data out to julia.

A simplified example is here

```julia
julia> ptr = ccall((:data, "libfoo"), Ptr{Cuchar}, (Cint,), 100)

00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 
10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 
20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 
30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 
40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 
50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f 
60 61 62 63 
Ptr{UInt8} @0x000055bd0bc533b0

```

What is the method of copying this data to an `Array{UInt8,1} ` ?

Thank you

---

<div class="post-metadata">

### Author: ![rdeits](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rdeits/32/286_2.png) [@rdeits](https://discourse.julialang.org/u/rdeits)
#### Post date: [August 23, 2018, 4:18pm UTC](https://discourse.julialang.org/t/copying-data-from-ptr-returned-from-ccall-to-julia-data-structure/13948/2 "2018-08-23T16:18:28Z")

</div>

You can use `unsafe_wrap(Array, ptr, dims)` to wrap your pointer in an Array (without copying the data). If you want to keep a copy of the data in Julia after you free it in your library, you can `copy(unsafe_wrap(Array, ptr, dims))`.

---

<div class="post-metadata">

### Author: ![r\_v](https://avatars.discourse-cdn.com/v4/letter/r/7993a0/32.png) [@r\_v](https://discourse.julialang.org/u/r_v)
#### Post date: [August 23, 2018, 4:21pm UTC](https://discourse.julialang.org/t/copying-data-from-ptr-returned-from-ccall-to-julia-data-structure/13948/3 "2018-08-23T16:21:40Z")

</div>

Perfect! Thank you!
