C Style char**

evilrat evilrat666 at gmail.com
Mon May 13 09:56:19 UTC 2019


On Monday, 13 May 2019 at 09:24:34 UTC, Doug Clayton wrote:
> Hi All,
>
> First time poster :)
>
> I'm working on getting a binding to Vulkan working properly in 
> D, but I've run into a roadblock. The good news is that the 
> binding seems to work fine, but I'm having an issue getting a 
> parameter that needs an input of a const(char*)* to receive all 
> of the members of the array. It only will receive the first 
> member.
>
> I've looked through the documentation, but I haven't seen a 
> clear way to cast a char*[] to a char** without it losing the 
> rest of the members. Can anyone help?

You don't need to cast it, arrays have .ptr property to get 
pointer to first element, and in @safe you just &arr[0] instead, 
or so I think.

If you are using static/literal arrays and know what you are 
doing this will work.

Otherwise it safer to just use regular string[] array and use 
something like that


     const(char*)* toCStringList(string[] arr)
     {
         import std.string; // toStringz() - adds null terminator, 
allocates using GC if necessary
         import std.array; // array() - eagerly converts range to 
array, allocates using GC
         import std.algorithm; // map() - apply function to range
         return arr
             .map!(toStringz)
             .array();
     }


More information about the Digitalmars-d-learn mailing list