Ваша проблема не имеет ничего общего с Unicode.
\r
- это escape-последовательность для возврата каретки. Итак, вы распечатываете "C:\icm\scripts\StartupSync
, а затем \r
говорит терминалу переместить курсор назад к началу текущей строки, а затем печатается unall.bat" nonprod
, перезаписывая то, что уже было.
Вам нужно экранировать все символы \
в строковом литерале, точно так же, как вам нужно экранировать символы "
.
Кроме того, ваша переменная должна быть объявлена как указатель на const char
при назначении строкового литерала указателю. Это применяется в C ++ 11 и более поздних версиях:
#include "stdafx.h"
#include <iostream>
int main()
{
const char * szOldPath = "\"C:\\icm\\scripts\\StartupSync\\runall.bat\" nonprod";
std::cout << szOldPath << std::endl;
return 0;
}
Кроме того, в C ++ 11 и более поздних версиях вы можете использовать необработанный строковый литерал вместо того, чтобы избежать необходимости экранирования. символы с ведущими \
:
const char * szOldPath = R"("C:\icm\scripts\StartupSync\runall.bat" nonprod)";