Почему GetTempPathA возвращает крякообразные символы

Я написал функцию для получения папки %Temp%

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

int main()
{
    setlocale(LC_ALL, "Russian");
    char* path = (char*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,MAX_PATH + 1)
    DWORD tempLenght = GetTempPathA(MAX_PATH + 1,path);
    std::cout << path;
}

Но вывод

C:\Users\CAC0~1\AppData\Local\Temp\

Имя пользователя было установлено кирилицей из-за этого ломается вывод но почему если я установил setlocale?

Так-же пытался использовать вместо char - wchar_t и GetTempPath но от этого программа вылетает после запуска


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

Автор решения: Павел Ериков

У вас в консоли выводится короткое имя пути (поподробней можете почитать тут.

Попробуйте воспользоваться функцией GetLongPathNameA, которая конвертирует короткую форму в полную. (MSDN)

Пример использования:

char* path = (char*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, MAX_PATH + 1);
DWORD tempLenght = GetTempPathA(MAX_PATH + 1, path);
char long_path[MAX_PATH + 1];
DWORD temp = GetLongPathNameA(path, long_path, MAX_PATH + 1);
std::cout << path << endl << long_path << endl;
→ Ссылка