How to use sprintf

Daniel Gibson metalcaedes at gmail.com
Mon Apr 25 09:47:20 PDT 2011


Am 25.04.2011 17:36, schrieb Steven Schveighoffer:
> On Mon, 25 Apr 2011 11:26:57 -0400, Vladimir Panteleev
> <vladimir at thecybershadow.net> wrote:
> 
>> On Mon, 25 Apr 2011 18:21:16 +0300, Robert Clipsham
>> <robert at octarineparrot.com> wrote:
>>
>>> On 25/04/2011 15:56, Vladimir Panteleev wrote:
>>>> On Mon, 25 Apr 2011 17:19:12 +0300, Steven Schveighoffer
>>>> <schveiguy at yahoo.com> wrote:
>>>>
>>>>> The problem the OP has is he is casting buffer to a char *. He should
>>>>> just use buffer.ptr.
>>>>
>>>> Casting a string to char* is exactly the same as using the .ptr
>>>> property, as far as generated code is concerned.
>>>
>>> Not when a string is defined internally as struct { size_t length;
>>> immutable(char)* ptr; }. Casting to char* is a pointer to the start
>>> of the length, not the pointer.
>>
>> Try it.
>>
> 
> I thought that "feature" was removed from D2?  Just tested it, and it's
> definitely not removed yet.  But it will be :)
> 
> -Steve

I don't think it's a good idea to remove it - that would probably
(silently) break a lot of code.
As I see it there are two possibilities to remove it:
1. completely forbid casting an array to a pointer (even to get the
address of the struct) - I don't think this is desirable?
2. silently change the behaviour to return the address of the struct
instead of .ptr - silently breaks code, even worse.

So why not just leave it the way it is?

Cheers,
- Daniel


More information about the Digitalmars-d mailing list