В каких случая нужно использова char а в каких wchar_t
Возник вопрос между использованием char и wchar_t. Сначала я создал программу
#include <windows.h>
#include <shlobj.h>
#include <stdio.h>
int main()
{
char* ptr = new char[MAX_PATH];
memset(ptr, 0, MAX_PATH);
if(SHGetFolderPathA(0, CSIDL_LOCAL_APPDATA, 0, 0, ptr) == S_OK)
{
lstrcatA(ptr, "\\FolderName");
if(CreateDirectoryA(ptr, 0))
{
printf("ok\n");
}
}
delete[] ptr;
system("pause");
}
И запустил её на Windows 10 полностью английской версии. Всё сработало отлично и папка FolderName как и ожидалось создалась. Затем я подумал что если запустить эту программу на ОС в которой имя пользователя будет на другом языке(не английском) то программа не сработает и нужно будет использовать wchar_t. Но когда я запустил программу на ОС в который имя пользователя было Валерий программа сработала и папка создалась. Отсюда у меня возник вопрос в каких случая нужно использовать wchar_t если и с char всё работает?
Ответы (1 шт):
whar_t в Windows API когда-то были UCS-2, теперь они UTF-16. Это всегда Unicode.
char могут соотвествовать какой-либо кодировке. С относительно недавних пор (2019) эта кодировка может быть UTF-8, ранее это всегда была не-Unicode кодировка.
TCHAR -- позволяет условную компиляцию с char или wchar_t.
Windows внутри переводит из char в wchar_t, некоторые функции есть только для wchar_t, весь COM использует wchar_t.
Зачем тогда иметь дело с char, если с wchar_t имеем Unicode, а с char - проблемы с кодировками? Возможные причины:
- Когда-то были системы Windows 9x, там
wchar_tфункции не были реализованы. Системы уже никем не поддерживаются, но остался код, который всё ещё не перенесен наwchar_t charиспользуется в других ОС, т.е. для универсальности.charиспользуется в библиотеках, даже в самом C++std::exception::whatвозвращает char