memcpy.addM. new Moved[++mSize] делает однозначную вещь - массив инстанций. В этом коде нет работы с полиморфизмом. new char[1] делает выделение всего в один символ. Если ты хочешь хранить там строку, то в такой буфер записать получится лишь пустую строку. Имеющегося пространства в этом буфере хватит только на терминальный символ и все.Там у Виндовз полная фигня
MAX_PATH определяется значением 260. Это - максимальная длина строки, принимаемой API функциями в качестве ASCII-представления пути. Ограничения в 255 символов в природе нет. А если учитывать эффект от SetCurrentDirectoryA, то лимитов на длину ASCII-представления пути тоже нет. 260 символов - это лимит промежуточного буфера, в который будет скопировано ASCII-представление твоего пути перед дальнейшей работой с ним.A, другие принимают UCS2-строки и именуются суффиксом W. Твой UTF-8 сперва надо перевести в UCS2/UTF-16 и только потом передавать в W-функцию.SetCurrentDirectoryW уже спокойно сможет перевести текущую рабочую директорию процесса в папку, в пути которой присутствуют этнические символы. ASCII-вариант тоже может, но только при правильном приведении кодировки строк представления путей. Это та еще задачка по сложности.ExW-функциями (при наличии вариантов с данными суффиксами). Строки, особенно путей, в WinAPI передает только в UCS2/UTF-16, а пути всегда приводит к UNC-нотации. (*++argv) [0] - сместить указатель на следующую ячейку, провести разыменование этой ячейки, взять первый элемент по адресу в этой ячейке.argv имеет тип const char* const argv[]. В ячейках argv лежат элементы типа const char* const, для которых тоже характерны операторы разыменования и произвольного доступа. "". Лично я не вижу проблемы его вывести.std::cout << 'Hello, world''Hello, world' вообще не является ни строковым, ни символьным литералом. Это - значение с типом int.
Это - в принципе первое, что стоит изучить сразу после запуска оси.