char* pointers between C and D

Mike Parker aldacron at gmail.com
Mon Jul 25 10:39:50 UTC 2022


On Monday, 25 July 2022 at 09:04:29 UTC, pascal111 wrote:
> I have small C program that uses a pointer to change the start 
> address of a string, and when I tried to do the same code but 
> with D, the D code printed the address of the string after I 
> increased it one step instead of printing the string the 
> pointer pointing to. Is there a difference between "char *" 
> pointers between C and D.

No, no difference. Pointers are the same in both languages. 
What's different is the behavior of `%s` in `writeln` vs 
`printf`. See the documentation on format strings at:

https://dlang.org/phobos/std_format.html

Essentially, `%s` tells the formatter to output something 
appropriate for the given type. For an actual D string, you see 
the text. For an integral or floating point type, you see the 
number. For a pointer, you see the the address. And so on.

Do in your case, to get `writefln` to print the text instead of 
the pointer address, you could import `std.string` and use 
`fromStringz`:`fromStringz(p)`.

This will give you a D string without allocating any memory. 
Basically an immutable slice of the memory pointed at by `p`. 
That's fine for this use case, but if you wanted to hang on to 
the string beyond the lifetime of the pointer, you'd have to use 
`std.conv.to` instead (e.g., `to!string(p)`).




More information about the Digitalmars-d-learn mailing list