Почему 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;