РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1209 of 1245 menu

Тип CStr

Тип CStr - это обёртка над C-строкой, то есть над последовательностью байтов, которая заканчивается нулевым байтом \0. В отличие от String и str, значения CStr не владеют своими данными, а лишь ссылаются на уже существующую память. Этот тип используется при взаимодействии с функциями языка C через FFI. Получить значение CStr можно с помощью метода from_ptr или из типа CString. Работа с CStr помечена как unsafe, поскольку он не гарантирует корректность указателя и наличие нулевого байта.

Синтаксис

use std::ffi::CStr; let c_str: &CStr = unsafe { CStr::from_ptr(ptr) };

Пример

Давайте создадим C-строку из байтового массива с нулевым байтом и получим её через from_ptr:

use std::ffi::CStr; use std::os::raw::c_char; fn main() { let bytes: [u8; 6] = [b'a', b'b', b'c', b'd', b'e', 0]; let ptr = bytes.as_ptr() as *const c_char; let c_str = unsafe { CStr::from_ptr(ptr) }; println!("{:?}", c_str); }

Результат выполнения кода:

"abcde"

Пример

Давайте преобразуем CStr в обычную строку &str с помощью метода to_str:

use std::ffi::CStr; use std::os::raw::c_char; fn main() { let bytes: [u8; 6] = [b'1', b'2', b'3', b'4', b'5', 0]; let ptr = bytes.as_ptr() as *const c_char; let c_str = unsafe { CStr::from_ptr(ptr) }; let res = c_str.to_str().unwrap(); println!("{}", res); }

Результат выполнения кода:

"12345"

Пример

Давайте получим байты C-строки без нулевого байта с помощью метода to_bytes:

use std::ffi::CStr; use std::os::raw::c_char; fn main() { let bytes: [u8; 6] = [b'a', b'b', b'c', b'd', b'e', 0]; let ptr = bytes.as_ptr() as *const c_char; let c_str = unsafe { CStr::from_ptr(ptr) }; let res = c_str.to_bytes(); println!("{:?}", res); }

Результат выполнения кода:

[97, 98, 99, 100, 101]

Смотрите также

  • тип CString,
    который представляет владеющую C-строку
  • метод from_ptr,
    который создаёт CStr из указателя
  • метод to_str,
    который преобразует CStr в &str
  • метод to_bytes,
    который возвращает байты C-строки без нулевого байта
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить