Правильно ли это код?
Да, ваш код (почти) отлично, потому что "string"
является строковым литералом и находится в статическом хранилище.
Примечание: Указатель - это просто переменная, в которой хранится адрес памяти. Эта строка просто сохраняет адрес строкового литерала «строка» внутри переменной с именем temp
.
char *temp = "string";
C++ стандарт гарантирует, что строка символов будет оставаться в памяти в течение всего срока программы, как определено ниже. Это означает, что вы можете использовать этот адрес памяти в любой области в любом месте в течение всей жизни вашей программы.
Почему?
Стандарта C++, 03 (ток) это сказать:
Обычная строка символов имеет типа «массив п сопзЬ полукокса» и статическую длительность хранения (3.7),
И раздел 3.7.1 - 1:
Все объекты, которые не имеют ни динамического хранения продолжительность и местность имеют продолжительность статического хранения. Хранилище для этих объектов должно длиться до продолжительности программы.
Предупреждение:
В своем коде вы возвращаете char*
, вы действительно должны возвращать const char *
. Это неопределенное поведение, если вы пытаетесь изменить строковый литерал, а возвращаемое значение функции не должно претендовать на его разрешение.
Относительная сторона примечания к предупреждению. Если у вас в вашем коде в двух разных местах строка, называемая "string"
, то есть ли они разные строки, это реализация.
Это домашнее задание? –
@Dirk Eddelbuettel: no. – Moeb