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