Что такое неисчерпаемый способ инициализации char * в С++?

Когда я инициализирую локальную переменную char *, как в С++:

char * pattern = "oggS";

компилятор предупреждает меня:

Foo.cpp:34: warning: deprecated conversion from string constant to ‘char*’

Что такое непринужденный способ сделать это на С++?

В случае, если это имеет значение, здесь, как я вызываю компилятор (из Eclipse):

g++-4.5 -O0 -g3 -Wall -std=c++0x -c -fmessage-length=0 -MMD -MP -MF"Foo.d" -MT"Foo.d" -o"Foo.o" "Foo.cpp"

Ответы

Ответ 1

Вы хотите:

const char * pattern = "oggS";

Или если вы намерены изменить символы в строке позже:

char pattern[] = "oggS";

Первый создает указатель-на-const- char, который указывает на строковый литерал. Вы не можете изменить литерал через этот указатель, что хорошо, потому что изменение литералов дает вам поведение undefined. Второй создает массив из 5 символов и инициализирует его "oggS". Результат не является строковым литералом, а просто обычным массивом, поэтому вы можете изменить содержащиеся в нем символы.