Проблема в том, что в «обычном» строковом литерале, таком как ваш, обратная косая черта вводит «специальные» символы, такие как, например, новая строка \n
.Чтобы получить один обратный слеш, вам нужно ввести два последовательных обратных слеша, то есть \\
, чтобы получить \
.
Чтобы преодолеть это, либо введите каждый обратный слеш дважды, либо используйте raw формат для указания строковых литералов:
int main() {
const char* raw = R"foo(\\\\.\\)foo";
cout << "raw: " << raw << endl;
const char* notRaw = "\\\\.\\";
cout << "not raw: " << notRaw << endl;
}
Вывод:
raw: \\\\.\\
not raw: \\.\
Обратите внимание, что часть "foo (" является пользовательской; она может быть любой по вашему выбору, которая не будет содержатьсяво внутренней части строкового литерала.