哪种更安全的方法将`uint8_t *`C缓冲区存储在Rust中?

I'm trying to interface C (actually C++) and Rust. I need to pass large buffers from C++ to Rust and from Rust to C++. In C++ the buffers are simply uint8_t*. I'm trying to understand what would be the equivalent in Rust.

Suppose that I want to receive C++ uint8_t* buffers in Rust and keep them in a queue without doing copies. That is, I want to keep them as they are received, without copying (each element) to a Rust container of some type. What would be this type?

According to Calling Rust method from C with array parameters, I can do

pub extern fn func(input: &[u8], dst: &mut[u8]) -> u8 {

and according to this answer https://stackoverflow.com/a/31238747/6655884 I can do

pub unsafe extern fn copy(src: *const [u8; 4], dst: *mut [u8; 4]) {
    if src.is_null() { return; }
    if dst.is_null() { return; }

    // Convert to borrowed pointers.
    let src: &[u8; 4] = &*src;

but I guess this only works for fixed size arrays. I cannot do &[u8; n] = &*src; for arbitrary n.

So which way is the best to safely deal with uint8_t* C buffers in Rust and how to pass them back to C?