module mutils..string; import core.stdc..string : memcpy; import mutils.container.string_tmp; auto getTmpCString(const(char)[] dstr, char[] buffer = null) { if (dstr.length == 0) { return StringTmp(cast(const(char)[]) "\0", false); } if (dstr[$ - 1] == '\0') { return StringTmp(cast(const(char)[]) dstr, false); } if (buffer.length >= dstr.length + 1) { memcpy(buffer.ptr, cast(void*) dstr.ptr, dstr.length); buffer[dstr.length] = '\0'; return StringTmp(cast(const(char)[])(buffer[0 .. dstr.length + 1]), false); } char[] mem = StringTmp.allocateStr(dstr.length + 1); memcpy(mem.ptr, cast(void*) dstr.ptr, dstr.length); mem[dstr.length] = '\0'; return StringTmp(cast(const(char)[])(mem), true); } unittest { auto tmpCString = getTmpCString("asdsdd ddd"); assert(tmpCString.deleteMem == true); assert(tmpCString.cstr == "asdsdd ddd\0"); tmpCString = getTmpCString("asdsdd ddd\0"); assert(tmpCString.deleteMem == false); assert(tmpCString.cstr == "asdsdd ddd\0"); tmpCString = getTmpCString(""); assert(tmpCString.deleteMem == false); assert(tmpCString.cstr == "\0"); }