LINUX.ORG.RU

История изменений

Исправление firkax, (текущая версия) :

Любой строковый литерал - это указатель на место в статической области памяти, предынициализированной компилятором, в которое компилятор этот самый литерал положил. Так что живёт он в течение всего времени работы программы. Нубов, которые втирают что-то про стек и области видимости, не слушай.

И замени char* на char const* т.к. литерал нельзя модифицировать. По-хорошему с char* вообще должно ошибку компиляции, но компиляторы эту конструкцию поддерживают для совместимости с древним кодом из 70-х-80-х, где const не было.

И ещё важная оговорка на всякий случай. Если ты напишешь так:

char st[] = "qwe";
(то есть, в явном виде задашь массив вместо указателя) то st будет уже не указателем на литерал, а обычной переменной, в которую записали эту строку, и живёт она как обычная переменная.

Исходная версия firkax, :

Любой строковый литерал - это указатель на место в статической области памяти, предынициализированной компилятором, в которое компилятор этот самый литерал положил. Так что живёт он в течение всего времени работы программы. Нубов, которые втирают что-то про стек и области видимости, не слушай.

И замени char* на char const* т.к. литерал нельзя модифицировать. По-хорошему с char* вообще должно ошибку компиляции, но компиляторы эту конструкцию поддерживают для совместимости с древним кодом из 70-х-80-х, где const не было.