Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
May 13, 2017 weird empty string | ||||
---|---|---|---|---|
| ||||
```d if (null) "1".writeln; if ("") "2".writeln; if ("" == null) "3".writeln; ``` Output: 2 3 How to understand this? |
May 13, 2017 Re: weird empty string | ||||
---|---|---|---|---|
| ||||
Posted in reply to mogu | On Saturday, 13 May 2017 at 00:36:55 UTC, mogu wrote:
> ```d
> if (null)
> "1".writeln;
> if ("")
> "2".writeln;
> if ("" == null)
> "3".writeln;
> ```
>
> Output:
> 2
> 3
>
> How to understand this?
Boolean conversion on an array works on array's pointer, not it's length. So even though `"".length == 0`, `"".ptr != null`, and so `cast(bool)"" == true`.
|
May 13, 2017 Re: weird empty string | ||||
---|---|---|---|---|
| ||||
Posted in reply to Stanislav Blinov | On Saturday, 13 May 2017 at 00:59:14 UTC, Stanislav Blinov wrote:
> On Saturday, 13 May 2017 at 00:36:55 UTC, mogu wrote:
>> ```d
>> if (null)
>> "1".writeln;
>> if ("")
>> "2".writeln;
>> if ("" == null)
>> "3".writeln;
>> ```
>>
>> Output:
>> 2
>> 3
>>
>> How to understand this?
>
> Boolean conversion on an array works on array's pointer, not it's length. So even though `"".length == 0`, `"".ptr != null`, and so `cast(bool)"" == true`.
```d
string s1 = null;
string s2 = "";
assert(s1 == null);
assert(s1.ptr == null);
assert(s2 == null);
assert(s2.ptr != null);
if (s1)
1.writeln;
if (s2)
2.writeln;
```
Output:
2
Thanks very much. This is a little bit confusing.
|
May 13, 2017 Re: weird empty string | ||||
---|---|---|---|---|
| ||||
Posted in reply to Stanislav Blinov | On Saturday, 13 May 2017 at 00:59:14 UTC, Stanislav Blinov wrote:
> On Saturday, 13 May 2017 at 00:36:55 UTC, mogu wrote:
>> ```d
>> if (null)
>> "1".writeln;
>> if ("")
>> "2".writeln;
>> if ("" == null)
>> "3".writeln;
>> ```
>>
>> Output:
>> 2
>> 3
>>
>> How to understand this?
>
> Boolean conversion on an array works on array's pointer, not it's length. So even though `"".length == 0`, `"".ptr != null`, and so `cast(bool)"" == true`.
However
if ([])
"1".writeln;
prints nothing.
So why does "" has non-null pointer while [] has null pointer? Looks inconsistent.
|
May 13, 2017 Re: weird empty string | ||||
---|---|---|---|---|
| ||||
Posted in reply to Yuxuan Shui | On 05/13/2017 06:20 AM, Yuxuan Shui wrote:
> So why does "" has non-null pointer while [] has null pointer? Looks
> inconsistent.
String literals are null-terminated, so "" needs to point at a null byte.
|
May 14, 2017 Re: weird empty string | ||||
---|---|---|---|---|
| ||||
Posted in reply to mogu | On Saturday, 13 May 2017 at 03:41:29 UTC, mogu wrote: > Thanks very much. This is a little bit confusing. There was a lot of discussion about it: https://issues.dlang.org/show_bug.cgi?id=4733, https://forum.dlang.org/thread/rrrtkfosfnfuybblexow@forum.dlang.org |
Copyright © 1999-2021 by the D Language Foundation