Re[7]: Инициализация массива строк
От: Андрей Тарасевич Беларусь  
Дата: 12.03.09 16:27
Оценка: 10 (1)
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, Андрей Тарасевич, Вы писали:


АТ>>В С строковые литералы не константны по типу (т.е. в C это 'array of char' а не 'array of const char'). Тем не менее и в С модификация строкового литерала запрещена, т.е. четко сказано, что попытка модификации строкового литерала приводит к неопределенному поведению.


E>В ANSI стандарте?


Да, именно там.

E>Точно написано?


Абсолютно точно. Даже в замшелом С89/90: "6.1.4 String Literals [...] If the program attempts to modify a string literal of either form, the behavior is undefined".

E>Я понмю, что у всех компиляторов была опция "можно совмещать совпадающие строковые литералы",


Эта опция влияет не только на результаты модификации литералов, но и на адресные свойства литералов, т.е. ее "ценность" не сводится только к вопросам модификации.

У компиляторов в дополнение к этому есть еще бывает опция, явно делающая строковые литералы модифицируемыми. Тем не менее к стандартному все С это отношения не имеет.

E>и припоминаю проги, которые использовали литералы, как буферы в памяти...


В "прогах" еще и не такое можно увидеть.
Best regards,
Андрей Тарасевич
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.