string to char*

bearophile bearophileHUGS at lycos.com
Sat Sep 11 09:07:38 PDT 2010


shd:
> I'm having a problem in passing a value to char* expecting function
> in D 2.0. Already tried:
> to!(char*)("my string");

A solution, maybe correct:


import std.string: toStringz, indexOf;
import std.c.string: strlen;
import std.stdio: writeln;

void main() {
    string s = "my string";
    assert(indexOf(s, '\0') == -1); // useful
    char* p = cast(char*)toStringz(s);
    writeln(strlen(p));
}


But keep in mind this string p is managed by the D GC.

That cast to cast(char*) is not nice.

There is no need to dup the string given to toStringz because it performs the dup internally (wasting a initialization of 'copy'), this is the cleaned up implementation of toStringz:


const(char)* toStringz(string s) {
    char[] copy = new char[s.length + 1];
    copy[0 .. s.length] = s;
    copy[s.length] = 0;
    return copy.ptr;
}


I don't know why it returns a const(char)* instead of a char*. Do you know why?

Bye,
bearophile


More information about the Digitalmars-d-learn mailing list