string literals

Simen Kjaeraas simen.kjaras at gmail.com
Sat Jan 26 11:17:13 PST 2008


Saaa <empty at needmail.com> wrote:

> I finally see what a string literal means, but this code still bothers  
> me.
> What does changing a dynamic char[] (str) have to do with the string  
> literal
> in str1
>
>>> from the 1.0 documentation:
>>>
>>> char[] str;
>>> char[] str1 = "abc";
>>> str[0] = 'b';        // error, "abc" is read only, may crash
>>>
>>> Is this example correct?
>>>
>>>
>>
>> Yes, because the "abc" is a string literal, that is to say it's written  
>> in
>> the code itself. If str1 was loaded from an outside source, such as a
>> file, user input, etc., then you could modify it without issue.
>>
>> For string LITERALS (a string literal is one you write in the code  
>> itself,
>> usually encased in double-quotes), modifying them without calling .dup  
>> on
>> them is bad. For other strings, it's perfectly okay.
>
>

You're right, of course. str[0] has nothing to do with "abc" or str1. The  
code will fail, but with an arraybounds error (str.length == 0, so no  
element 0 is available)

Now, this code:

   char[] str1 = "abc";
   str1[0] = 'b';        // error, "abc" is read only, may crash

Should fail for the above reasons.


Simen Kjaeraas


More information about the Digitalmars-d-learn mailing list