Разрешение изображения для новых iPhone 6 и 6+, добавлена ​​поддержка @ 3x?

Для полноты проекта C99 проект стандарта ( C89 и C11 имеет схожую формулировку ) в разделе 6.4.5 . Строковые литералы, параграф 5 , гласят:

[...] байт или код нулевого значения добавляется к каждой многобайтовой последовательности символов, которая возникает из строкового литерала или литералов. Последовательность многобайтовых символов затем используется для инициализации массива статической продолжительности хранения и длины, достаточной для того, чтобы содержать последовательность. Для символьных строковых литералов элементы массива имеют тип char и инициализируются отдельными байтами многобайтовой последовательности символов, [...]

blockquote>

Таким образом, это говорит строковый литерал имеет статическую продолжительность хранения ( длится время жизни программы ), и это тип char[] (не char *), а его длина - это размер строкового литерала с добавленным нулем , * Параграф 6 говорит:

Если программа пытается изменить такой массив, поведение не определено.

blockquote>

Поэтому попытка изменить Строковый литерал является неопределенным поведением , независимо от того, что они не являются const.

В отношении argv в разделе 5.1.2.2.1 Программа в пункте 2 запуска говорится:

Если они объявлены, параметры главной функции должны подчиняться следующим ограничениям:

[...]

. Параметры argc и argv и строки, на которые указывает массив argv, могут быть модифицированы программой и сохраняют свои последние сохраненные значения между запуском программы и завершением программы.

blockquote>

Таким образом, argv не считается массивом строковых литералов, и нормально модифицировать содержимое argv.

140
задан Community 23 May 2017 в 12:10
поделиться