Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using a local clone.


Contains various string related functions.
pure nothrow @nogc inout(char)[] toDString(inout(char)* s);
Slices a \0-terminated C-string, excluding the terminator
static bool iequals(const(char)[] s1, const(char)[] s2);
Compare two slices for equality, in a case-insensitive way
Comparison is based on char and does not do decoding. As a result, it's only really accurate for plain ASCII strings.
const(char)[] s1 string to compare
const(char)[] s2 string to compare
true if s1 == s2 regardless of case
nothrow auto toCStringThen(alias dg)(const(char)[] src);
Copy the content of src into a C-string ('\0' terminated) then call dg
The intent of this function is to provide an allocation-less way to call a C function using a D slice. The function internally allocates a buffer if needed, but frees it on exit.

Note The argument to dg is scope. To keep the data around after dg exits, one has to copy it.

const(char)[] src Slice to use to call the C function
dg Delegate to call afterwards
The return value of T
pure nothrow @nogc @safe string stripLeadingLineTerminator(string str);
Strips one leading line terminator of the given string.
The following are what the Unicode standard considers as line terminators:
| Name | D Escape Sequence | Unicode Code Point | |---------------------|-------------------|--------------------| | Line feed | \n | U+000A | | Line tabulation | \v | U+000B | | Form feed | \f | U+000C | | Carriage return | \r | U+000D | | Next line | | U+0085 | | Line separator | | U+2028 | | Paragraph separator | | U+2029 |
This function will also strip \r\n.
@trusted int dstrcmp()(scope const char[] s1, scope const char[] s2);
A string comparison functions that returns the same result as strcmp

Note Strings are compared based on their ASCII values, no UTF-8 decoding.

Some C functions (e.g. qsort) require a int result for comparison.

See Also:
Druntime's core.internal.string
char[N + 1] toStaticArray(size_t N)(scope const(char)[N] literal);
Infers the length N of a string literal and coerces its type to a static array with length N + 1. Returns the string with a null character appended to the end.
const(char)[N] literal string literal


- LDC produces quite optimal code for short strings: - - (backup URL)

auto m = "123".toStaticArray;
const c = "123".toStaticArray;
immutable i = "123".toStaticArray;
enum e = "123".toStaticArray;

assert(m == "123\0");
assert(c == "123\0");
assert(i == "123\0");
static assert(e == "123\0");

const empty = "".toStaticArray;
static assert(empty.length == 1);
static assert(empty[0] == '\0');
pure nothrow @nogc @system bool startsWith(scope const(char)* p, scope const(char)[] needle);
Checks if C string p starts with needle.
const(char)* p the C string to check
const(char)[] needle the string to look for
true if p starts with needle
const buf = "123".toStaticArray;
const ptr = &buf[0];