Passing string array to C
Adam D. Ruppe
destructionator at gmail.com
Thu Sep 10 15:41:17 UTC 2020
On Thursday, 10 September 2020 at 14:31:41 UTC, Andre Pany wrote:
> Why does it crash?
You messed up the pointers.
A string is one star.
An array of strings is two stars.
A pointer to an array of strings is /three/ stars.
size_t* i; // this need not be a pointer either btw
const(wchar)** r; // array of strings
sample(&r, &i); // pass pointer to array of strings
// Try to read the 2 string values
auto arr = r[0..*i]; // slice array of strings
writeln(to!string(arr)); // Works
writeln(to!string(arr)); // all good
// taking a pointer to an array of strings so 3 stars
extern(C) export void sample(const(wchar)*** r, size_t** c)
string arr = ["foo¤", "bar"];
auto z = new const(wchar)*[arr.length];
foreach(i, ref p; z)
p = toUTF16z(arr[i]);
// previously you were sending the first string
// but not the pointer to the array
// so then when you index above, arr is bad math
*r = &z;
*c = new size_t();
**c = arr.length;
More information about the Digitalmars-d-learn