Вы не можете просто повторно привести строку wchar_t
к строке char
и ожидать, что она будет работать, поскольку может (будет) быть много wchar_t
значений, которые имеют свои верхние Байт как ноль (который будет рассматриваться как терминатор после приведения).
Итак, вместо:
printf("%s", (char *)reposPath.c_str());
, который видит «ложный» нуль-терминатор после f
, просто напечатайте строку wchar_t
, чтобы узнать, что это такое:
printf("%ws", reposPath.c_str());
Кроме того, в вашем объявлении mbstr
отсутствует const
, которое должно быть следующим:
const char* mbstr = "f:\\mypath1\\mypath2\\mypath3";
и вам не нужно выделять удвоенное число char
для вашего wchar_t
буфера, так что этого будет достаточно:
if (c_ReposPathString)
{
c_ReposPathStringSize = strlen(c_ReposPathString) + 1; // Don't need "* 2"
}
Не стесняйтесь просить дальнейших разъяснений и / или объяснение.