Не выводит правильно путь до файла

Подскажите как правильно сделать функцию возвращения полного пути до файла?
Попробовал так:

#include <iostream>
#include <windows.h>

std::wstring GetFilePath();

int main() {
    printf("Filepath: %ws\n", GetFilePath());
    system("pause");
    return 0;
}

std::wstring GetFilePath()
{
    WCHAR buffer[MAX_PATH + 1];
    GetModuleFileName(NULL, buffer, sizeof(buffer) / sizeof(buffer[0]));
    return buffer;
}

Но он мне выводит не путь а цифры типа: 019809


Ответы (2 шт):

Автор решения: S.H.

Копирую фрагмент кода из ссылки, котрую привел в комментарии. Как я понял, всё дело - в волшебных пузырьках, то есть анализе кода ошибок и правильном использовании возвращаемых значений. Ответ получается в последней строчке этого кода

DWORD result = GetModuleFileNameA(nullptr, &buf[0], size);
    DWORD lastError = GetLastError();
    if (result == 0)
    {
      shouldContinue = false;
    }
    else if (result < size)
    {
      havePath = true;
      shouldContinue = false;
    }
    else if (
      result == size
      && (lastError == ERROR_INSUFFICIENT_BUFFER || lastError == ERROR_SUCCESS)
      )
    {
      size *= 2;
      buf.resize(size);
    }
    else
    {
      shouldContinue = false;
    }
  } while (shouldContinue);
  if (!havePath)
  {
    return detail::executable_path_fallback(argv0);
  }
  // On Microsoft Windows, there is no need to call boost::filesystem::canonical or
  // boost::filesystem::path::make_preferred. The path returned by GetModuleFileNameA
  // is the one we want.
  std::string ret = &buf[0];
→ Ссылка
Автор решения: Harry

Чтобы выводить с помощью printf, надо передавать не wstring, а wchar_t*, т.е. добавить .c_str() - и все заработает...

printf("Filepath: %ws\n", GetFilePath().c_str());

Откуда же функции из C знать о типах С++? Лучше, кстати, использовать "родной" вывод:

std::wcout << L"Filepath: " << GetFilePath() << std::endl;
→ Ссылка