#string-literal #literals #c-compatible

const-cstr

从 Rust 字符串字面量创建静态与 C 兼容的字符串

4 个版本 (2 个重大更改)

使用旧的 Rust 2015

0.3.0 2018年2月10日
0.2.1 2016年7月30日
0.2.0 2016年7月30日
0.1.0 2015年9月28日

#6 in #c-compatible

Download history 13189/week @ 2023-11-21 15929/week @ 2023-11-28 12518/week @ 2023-12-05 15160/week @ 2023-12-12 10999/week @ 2023-12-19 7087/week @ 2023-12-26 14752/week @ 2024-01-02 13782/week @ 2024-01-09 15442/week @ 2024-01-16 15089/week @ 2024-01-23 13621/week @ 2024-01-30 13911/week @ 2024-02-06 16218/week @ 2024-02-13 16168/week @ 2024-02-20 16152/week @ 2024-02-27 13900/week @ 2024-03-05

64,362 每月下载量
89 个crate中使用 (46 个直接使用)

MIT/Apache

9KB
65

const-cstr

从 Rust 字符串字面量创建静态与 C 兼容的字符串。

用法

Cargo.toml

[dependencies]
const-cstr = "0.1"

crate 根目录

#[macro_use] extern crate const_cstr;

示例

 #[macro_use] extern crate const_cstr;

 use std::os::raw::c_char;
 use std::ffi::CStr;

 const_cstr! {
     HELLO_CSTR = "Hello, world!";

     // Multiple declarations can be made with one invocation.
     // GOODNIGHT_CSTR = "Goodnight, sun!";

     // But only with the same visibility:
     // pub GOODNIGHT_CSTR = "Goodnight, sun!";
     // ^~~ Error: expected identifier, found `pub` 
 }

 // Imagine this is an `extern "C"` function linked from some other lib.
 unsafe fn print_c_string(cstr: *const c_char) {
     println!("{}", CStr::from_ptr(cstr).to_str().unwrap());
 }

 fn main() {
     // When just passed a literal, returns an rvalue instead.
     let goodnight_cstr = const_cstr!("Goodnight, sun!");

     unsafe {
         print_c_string(HELLO_CSTR.as_ptr());
         print_c_string(goodnight_cstr.as_ptr());
     }
 }

打印

Hello, world!
Goodnight, sun!

许可证

根据您的选择,许可协议为

贡献

除非您明确表示,否则您提交的任何有意包含在作品中的贡献将根据上述条款双重许可,不附加任何额外条款或条件。

无运行时依赖