Help passing D strings to C libs
Jonathan M Davis
jmdavisProg at gmx.com
Sun Mar 13 22:10:05 PDT 2011
On Sunday 13 March 2011 21:32:49 Gene P. Cross wrote:
> Hi, I'm fairly new to D and I'm writing a Space Invaders clone to get
> myself acquainted with the language.
>
> I'm having trouble passing D strings (char[]) to SDL, in particular
> SDL_LoadBMP(), I keep receiving a segfault.
>
> Heres the code:
>
> void setImg(string path) {
> // concat null terminating char to string and cast to c type string
> when // passing to SDL_LoadBMP()
> path ~= "\0";
> image = SDL_LoadBMP( cast(char*)path );
> }
>
> and the value of path is "./resources/cannon.bmp"
>
> I'm using SDL 1.2.14 and DMD 1.067 on Ubuntu 10.10
>
> If someone could tell me what I'm doing wrong it would be greatly
> appreciated.
I don't use D1, so I don't know all of the ins and outs, but you're going to
have to make sure that you put a "\0" at the end of the string so that it's
properly null-terminated (which you appear to be doing), and you should be
passing the string's ptr property to the function, not casting the string to
char*.
If you were dealing with D2, you'd also have to worry about not passing a string
(as opposed to a char[]) to a C function if there's _any_ chance that it would
alter it, since string in D2 is immutable(char)[], but that's not the case in
D1, so that shouldn't be a problem with what you're doing.
- Jonathan M Davis
More information about the Digitalmars-d-learn
mailing list