将string []转换为char **

时间:2012-10-29 16:12:50

标签: d

假设我想将一组命令行选项转发给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)**)。

1 个答案:

答案 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);
}

这是现场演示:http://dpaste.dzfl.pl/ff81984c