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

Тип c_char

Тип c_char представляет собой символ в стиле языка C и используется при взаимодействии с внешними функциями через FFI. В отличие от Rust-типа char, который всегда занимает 4 байта и хранит Unicode-скаляр, c_char соответствует типу char из C и обычно занимает 1 байт. Тип c_char является знаковым или беззнаковым в зависимости от платформы, поэтому его не следует использовать для хранения Unicode-символов. Параметров у типа нет, так как это примитивный тип-псевдоним.

Синтаксис

use std::os::raw::c_char; let x: c_char = 65;

Пример

Давайте создадим переменную типа c_char и выведем её значение:

use std::os::raw::c_char; fn main() { let x: c_char = 65; println!("{}", x); }

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

65

Пример

Давайте преобразуем массив байтов в C-строку и выведем её содержимое:

use std::os::raw::c_char; use std::ffi::CStr; fn main() { let bytes: [c_char; 6] = [104, 101, 108, 108, 111, 0]; let c_str = unsafe { CStr::from_ptr(bytes.as_ptr()) }; let res = c_str.to_str().unwrap(); println!("{}", res); }

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

"hello"

Пример

Давайте передадим C-строку в функцию, имитирующую внешний C-код, и получим её длину:

use std::os::raw::c_char; unsafe fn c_strlen(s: *const c_char) -> usize { let mut len = 0; while *s.offset(len as isize) != 0 { len += 1; } len } fn main() { let bytes: [c_char; 6] = [104, 101, 108, 108, 111, 0]; let res = unsafe { c_strlen(bytes.as_ptr()) }; println!("{}", res); }

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

5

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

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