Actually, this still suffers from the problem when the returned char* doesn't have a null terminator. It really sucks when C code does that, and I've just experienced that. There is a solution though:
Since we can detect the length of the D array passed into `fromStringz`, we can do the job of to!string ourselves and check for a null terminator. If one isn't found, we return a string of length 0. Here's an updated version which doesn't suffer from the missing null terminator problem: string fromStringz(T)(T value) { static if (isArray!T) { if (value is null || value.length == 0) { return ""; } auto nullPos = value.indexOf("\0"); if (nullPos == -1) return ""; return to!string(value[0..nullPos]); } else { return to!string(value); } }