假设我想将一组命令行选项转发给C函数,声明如下,使用D main取args
extern (C) void init(int argc, char** argv);
void main(string[] args) {
init(args.length, map!(toStringz)(args));
}
第一个参数很简单,但我尝试将toStringz
应用于args
数组似乎不起作用。我得到cannot implicitly convert expression (map(args)) of type MapResult!(toStringz,string[]) to char**
。如何将string[]
转换为char**
(甚至const(char)**
)。
答案 0 :(得分:4)
std.algorithm.map
函数返回范围,在您的情况下必须更改为数组。您可以使用std.array.array
执行此操作。然后,您可以使用.ptr
获取数组指针。它会返回immutable(char**)
,并将其投放到char**
:
extern (C) void init(int argc, char** argv);
void main(string[] args) {
init(cast(int)args.length, cast(char**)map!(toStringz)(args).array.ptr);
}