• Из-за чего debug assertion failed?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Предположительно ругается стандартная библиотека CRT из за нечетного размера буфера.
    _O_U16TEXT предполагает что символы двухбайтные хотя где-то идёт попытка использовать четное число байт как аргумент.
    Ответ написан
    2 комментария
  • Стоит ли заниматься программированием в моем возрасте?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Что тут сказать? Мы же вас не знаем.
    Да, можно начинать в любом возрасте - и может получиться.
    Да, может и не получиться.
    Всё от человека зависит, сколько сил и времени вы приложите. Чем больше, тем лучше будет результат. Очевидные же вещи.
    Интернет тут точно не помощник.
    Есть предрассудки, что программистов после 40 лет не берут. Так вот это заблуждение. Мы, например, с удовольствием берём прогеров за 40, у них колоссальный опыт и большая ответственность. Лучше взять 40-летнего, чем 20-летнего.
    Да и знакомые мои погеры за 40 без работы не сидят - с руками отрывают, берут их везде легко.
    Ответ написан
    1 комментарий
  • В чём разница способов подключения кириллицы?

    @lorc
    Исходя из опытов выше, возникает вопрос: а чем различаются эти два варианта подключения кириллицы к проекту?


    Практически всем. На самом деле, у вас есть две сущности - ваша программа и терминал. Ваша программа читает данные из stdin и пишет в stdout/stderr. Терминал же занимается тем, что отображает данные на экран. Для вас критически важно, чтобы программа передавала данные в той кодировке, в которой их ожидает увидеть терминал.

    Соотвественно, когда вы вызываете SetConsoleOutputCP(1251), вы говорите терминалу "ожидай данные в кодировке СР1251". Это плохо по нескольким причинам:

    • Это чисто виндова функция. Она не переносима на другие платформы
    • СР1251 - однобайтовая кодировка и ее лучше не использовать в 21 веке. Нужен юникод.
    • Другие программы, работающие в этом же терминале (например echo) не знают что вы поменяли кодировку терминала. Потому вы и видите мусор.


    Когда вы вызываете setlocale - вы говорите своей программе "возьми настройки кодировки из окружения и выдавай текст в ней". В результате вы подстраиваетесь под терминал и используете ту кодировку, в которой он работает. Скорее всего это будет юникод. В этом варианте все минусы превращаются в плюсы - это переносимо, это юникод, остальные программы будут работать нормально.

    Кстати, вызывать setlocale с параметром Russian не совсем верно. Нужно использовать пустую строку -"". Интересно, что я уже второй раз вижу на тостере именно "Russian". Кажется, где-то по рунету гуляет неправильный пример.
    Ответ написан
    Комментировать