The more interesting question
deadalnix
deadalnix at gmail.com
Wed May 16 14:08:57 PDT 2012
Le 16/05/2012 22:19, Alex Rønne Petersen a écrit :
> On 16-05-2012 22:00, deadalnix wrote:
>> Le 16/05/2012 12:10, Timon Gehr a écrit :
>>> On 05/16/2012 12:29 AM, deadalnix wrote:
>>>> Le 15/05/2012 20:34, Alex Rønne Petersen a écrit :
>>>>> Besides, this is probably not going to change anyway. We're
>>>>> focusing on
>>>>> stabilizing the language, not changing it.
>>>>>
>>>>
>>>> This always have been a design mistake to auto cast array in pointers.
>>>> This is silent fallback to usafe world, and what we want to avoid.
>>>>
>>>
>>> Getting a pointer to the beginning of a zero-terminated string literal
>>> is perfectly safe.
>>>
>>>> This has no benefit because using .ptr isn't really complex and make
>>>> the
>>>> transition obvious.
>>>>
>>>> This has been raised many time in the past as being an issue, and it
>>>> fit
>>>> nicely here.
>>>>
>>>
>>> This is a compile time error:
>>>
>>> int[] arr;
>>> int* p=arr;
>>>
>>> What exactly are you asking for?
>>>
>>
>> void foo(const(char)*);
>>
>> foo("bar");
>>
>> isn't .
>
> And shouldn't be. Working with C APIs or just working on druntime would
> be a nightmare.
>
>>
>>>> Having \0 terminated string in D were it has no usage is quite dumb.
>>>
>>> What you don't seem to get is that it actually has usage.
>>
>> I understand that. I want to propose something more subtle.
>>
>> Array in D are already typed according to what the are assigned. int[]
>> foo = [1, 2] and immutable(int)[] = [1, 2] are both possible). Isn't it
>> possible to \0 terminate string chen they are used as char* and not when
>> they are used as array ?
>
> Theoretically, yes, practically, not really.
>
> void myLog(string msg)
> {
> printf(msg);
> }
>
This is exactly why array shouldn't fallback into pointer silently.
Your code here is flawed and unsafe. You NEED a toStringz here.
More information about the Digitalmars-d
mailing list