Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何在rust中创建并传递以null结尾的C字符串数组(char**)?_Arrays_Rust_C Str - Fatal编程技术网

Arrays 如何在rust中创建并传递以null结尾的C字符串数组(char**)?

Arrays 如何在rust中创建并传递以null结尾的C字符串数组(char**)?,arrays,rust,c-str,Arrays,Rust,C Str,我正在玩一个带有#的新init系统![no_std]和外部板条箱rlibc并使用asm进行系统调用,目前也尝试不分配内存。因此,我拥有的可能工具的范围是有限的 我需要调用execve系统调用,它需要一个char**argv,和一个char**envp。我可以把c风格的字符串拼凑成带零的字节数组,但是我怎么能用null终止这样一个静态声明的列表(最后一个指针为null)?在沉睡于此之后,我醒来时得到了答案,现在我似乎明白了。使用整数切片并将最后一个设置为0 // Execute something

我正在玩一个带有
#的新init系统![no_std]
外部板条箱rlibc
并使用asm进行系统调用,目前也尝试不分配内存。因此,我拥有的可能工具的范围是有限的


我需要调用execve系统调用,它需要一个
char**argv
,和一个
char**envp
。我可以把c风格的字符串拼凑成带零的字节数组,但是我怎么能用null终止这样一个静态声明的列表(最后一个指针为null)?

在沉睡于此之后,我醒来时得到了答案,现在我似乎明白了。使用整数切片并将最后一个设置为0

// Execute something as an example:
let filename: &[u8] = b"/usr/bin/sensors\x00";     // <-- Make c strings like this
let argv1: &[u8] = b"/usr/bin/sensors\x00";
let argv2: &[u8] = b"-h\x00";
let argv: &[int] = [                               // <-- store them in this
    ::core::intrinsics::transmute(argv1.as_ptr()), // <-- transmuting 
    ::core::intrinsics::transmute(argv2.as_ptr()),
    0                                              // <-- and NULL terminate
];
let envp: &[int] = [0];

::linux64::execve(filename,argv,envp);
//以执行某件事情为例:

让文件名:&[u8]=b“/usr/bin/sensors\x00”;//您应该使用
*const u8
而不是
int
as_ptr()
方法已返回一个
*const u8
,因此您可以删除
transmute
。要获取空指针,请使用
ptr::null()
(或
0 as*const T
)而不是
0
。此外,您可以在ByTestRing中使用
\0
而不是
\x00
来表示空字节。您可以自由地将原始指针转换为整数(
argv1.as_ptr()as int
),但正如@francisgagne所建议的,最好存储
和[*const u8]
。另外,您是否知道
使用
,同时允许将名称引入范围,例如
使用核心::mem。。。mem::transmute(…)
?@FrancisGagné:谢谢你这么说,我希望有人能对这篇文章发表评论types@dbaupp我不知道演员阵容这么简单。是的,我知道如何使用,我现在更喜欢看完整的路径。