Biggest problems w/ D

Gilles G. schaouette at free.fr
Fri Aug 10 05:11:51 PDT 2007


Kirk McDonald Wrote:

> C. Dunn wrote:
> > 4) Not enough help for converting between D strings and C char*. 
> > There must be conversion functions which work regardless of whether
> > the D string is dynamic or not, and regardless of whether the C char*
> > is null terminated.  I'm not sure what the answer is, but this has
> > lead to a large number of runtime bugs for me as a novice.
> > 
> 
> The std.string module has the toStringz and toString functions.
> 
> The toString function simply returns a slice over the C string:
> 
> char[] toString(char* ptr) {
> 	return ptr[0 .. strlen(ptr)];
> }
> 
> The toStringz function simply appends a null character (\0) to the end
> of the D string:
> 
> char* toStringz(char[] str) {
> 	return (str ~ \0).ptr;
> }
> 
> These are very simple operations, and it is fairly easy to adapt
> them to whatever needs you have.
Well, maybe I could not find an obvious solution, but let's explain the problems I had with char[] and char*.

I have a DLL defining the following (extern) function:
      extern(Windows) void GetName(char* name)
I would just like to put the name of the DLL in the variable name. What I would do in C is something like:
     extern(Windows) void GetName(char* name)
     {
          name = "The DLL name";
     }
This just won't work in D... My solution for now is the following:
     extern(Windows) void GetName(char* name)
    {
        foreach(ic, c; "The DLL name\0")
             name[ic]=c;
    }
which is ugly, but do you have a better solution?

--Gilles



More information about the Digitalmars-d mailing list