Struct bitflags::__core::ffi::CString
[−]
[src]
pub struct CString {
// some fields omitted
}1.0.0A type representing an owned C-compatible string
This type serves the primary purpose of being able to safely generate a C-compatible string from a Rust byte slice or vector. An instance of this type is a static guarantee that the underlying bytes contain no interior 0 bytes and the final byte is 0.
A CString is created from either a byte slice or a byte vector. After
being created, a CString predominately inherits all of its methods from
the Deref implementation to [c_char]. Note that the underlying array
is represented as an array of c_char as opposed to u8. A u8 slice
can be obtained with the as_bytes method. Slices produced from a CString
do not contain the trailing nul terminator unless otherwise specified.
Examples
use std::ffi::CString; use std::os::raw::c_char; extern { fn my_printer(s: *const c_char); } let c_to_print = CString::new("Hello, world!").unwrap(); unsafe { my_printer(c_to_print.as_ptr()); }
Safety
CString is intended for working with traditional C-style strings
(a sequence of non-null bytes terminated by a single null byte); the
primary use case for these kinds of strings is interoperating with C-like
code. Often you will need to transfer ownership to/from that external
code. It is strongly recommended that you thoroughly read through the
documentation of CString before use, as improper ownership management
of CString instances can lead to invalid memory accesses, memory leaks,
and other memory errors.