по-моему она возникает как раз не в cmd, а в консоли VS Code.
setlocale(LC_ALL, "")
мог бы помочь именно здесь.Как ни странно, именно en_US.utf8 с русским текстом на моей русской винде работает нормально...
utf8
имеет значение, и, поскольку она обозначает кодировку, способную представить весь unicode, она будет работать для любых символов. Проблемы будут у людей использующих кодовые страницы типа сp1251
. Насчёт второго - нет, на выходе после расшифровки нужны именно любые символы любых языков.
en_US.utf8
? setlocale(LC_ALL, "")
? Второй здесь: зачем там wchar_t, учитывая, что на выходе будут только символы из набора с64? значит все таки проблема в валгринде?
valgrind --tool=memcheck --leak-check=yes ./$(NAME)
valgrind --tool=memcheck --leak-check=yes ./$(NAME) || echo "valgrind error code: $$?"
куда тут вставить округление
Поэтому и прошу помощи
> для полноты картины стоит показывать полный лог выполнения команды make
>> не вижу смысла в этом
Полный лог высылать нет смысла, там нет никакой информации
да нет, дело не в шифровании:
int main(int argc, wchar_t* argv[]) ... printf("%s ", argv[i]);
%s
-- это не тот формат, который можно использовать для вывода строки wchar_t*
. Этот код частично работает потому что ты не работаешь с отдельными символами argv
, если бы ты стал это делать, ты бы сразу увидел, что что-то сильно не так. Попробуй в этой программе посимвольно напечатать аргументы. читал в одном источнике, что на Windows новых версий наоборот аргументы в cmd.exe передаются в Unicode
я реализовал чтение аргументов через функции WinAPI, заключив их в #ifdef. Насколько это индусский код, и что с ним будет на Linux?
в чём отличие преобразования (wchar_t*) в (char*) явным образом и вызова wcstombs?
после расшифровки строки с русскими буквами и её вывода на консоль получался мусор. Это так и должно быть, или где-то в моём коде есть баг, который к этому приводит?
Вопрос в том, что может я где-то усложнил себе жизнь?
Я говорил о том, что после прохода отладчиком в папке остаётся exe файл.
Например так. Да, ламерский подход
strcat
не меняет размер выделенной для строки памяти, это нужно делать самостоятельно перед её вызовом.
а что мешает-то? Бери livecd и смотри что происходит.