Я пишу CLI для библиотеки шифрования. Сама библиотека работает на уровне байтов, однако я хочу, чтобы у пользователя была возможность передавать исходные строки и ключи, содержащие символы Unicode (кроме латиницы и цифр) через командную строку. Соответственно, мне нужно конвертировать массив wchar_t в массив char перед шифрованием, а после дешифровки выполнять обратную конвертацию.
При этом я знаю, что на Windows и Linux консоль использует разные кодировки (UTF-16/UTF-32). Насколько я знаю, функция
wprintf()
может об этом позаботиться сама, но мне нужен способ выполнять конвертацию в обе стороны.
Я поменял сигнатуру функции main() на
int main(int argc, wchar_t* argv[])
(пытался исправлять на wmain, но тогда ругается ld и сборка падает с ошибкой). Также в её коде поменял функции сравнения и добавил к литералам префикс L.
Для конвертации wchar_t* в char* я пробовал использовать функцию
wcstombs, однако почему-то у меня она совершенно не работает (при попытке преобразовать строку, содержащую только латиницу, я получаю null). Что касается обратного преобразования - я вообще не знаю, как его можно сделать.
Подскажите, пожалуйста, где можно об этом почитать.
Вот код, которым я пытаюсь конвертировать (да, я знаю, что требуемый размер нужно получать не так, но по идее, если поставить с запасом, ошибки быть не должно):
input = (char*) malloc(wcslen(argv[1]) * 4 + 1);
wcstombs(input, argv[1], wcslen(argv[1]) * 4);
printf("The converted string is \"%s\"\n", input);