1. C++ / Говнокод #17591

    +57

    1. 1
    2. 2
    3. 3
    static int lowercase(const char *s) {
      return tolower(* (const unsigned char *) s);
    }

    Byte-fuck

    Запостил: blackhearted, 06 Февраля 2015

    Комментарии (5) RSS

    • Не Byte-fuck, а Microsoft-fuck. При отладочной сборке программы в MSVC на чарах больше 127 (например на русских буквах) в tolower/toupper происходит падение по ассерту. Так что приходится явно приводить char (которые по умолчанию знаковые) к беззнаковому типу.
      Ответить
      • > происходит падение по ассерту
        Даже с корректной локалью?
        Ответить
    • Не люблю майкрософт, но как раз здесь они абсолютно правы, что валят по ассерту. Сишные tolower/toupper и иже с ними можно использовать только с unsigned char или значением EOF.
      Так что остаётся либо касисть явно к unsigned char (только вряд ли так, как это делал автор сего примера: кастить нужно сами чары, а не указатели на них), либо, раз уже юзаете C++, смотреть в сторону версий tolower/toupper/..., определённых в хедере <locale>.
      Ответить
    • - Поедешь на автобусе, - я уже был где-то на лестнице.
      Ответить

    Добавить комментарий