1. Си / Говнокод #17638

    +143

    1. 1
    2. 2
    3. 3
    char value[60] = {0};
    int data;
    snprintf(value, sizeof(value-1), "|%7u\n", data);

    coverity полагал что заменить sprintf на snprintf было бы безопаснее

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

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

    • >sizeof(value-1)
      Ответить
    • Ха-ха, код зайдёт за пределы массива на 512-битном компьютере.
      И запишет туда десятичное представление мусора.
      Ответить
    • Адресная арифметика - зло
      Ответить
      • >Я ниасилил адресную арифметику
        FTFY bro
        Ответить
        • Адресная арифметика зло.

          Осиливший адресную арифметику.
          Ответить
          • зло - не зло, а байтоебить приходится
            Ответить
            • Ну и goto тоже зло, но в сишке юзать приходится. Тут главное не злоупотреблять.
              Ответить
              • из разряда - jmp тоже зло, но в асме приходится юзать

                goto помогает выпрыгивать из n-ого цикла без всяких флагов
                Ответить
                • Да goto из цикла даже у нас в высокоуровневом жс есть. Кажется, в одном из прошлых холиваров goto для циклов помиловали.
                  Ответить
                  • главное юзать с умом.

                    Так я высокоуровневый сишарпей
                    Ответить
                    • > высокоуровневый сишарпей
                      80лвл?
                      Ответить
                    • У меня не выйдет. Опыта нет.
                      Про метки в жс вспоминаю только во время обсуждений на ГК и, когда мне встречаются тесты вида "ололо если ти крутой жабошкриптер, то ты знаешь, сколько будет []+true*8-4+'3'|0".

                      P.S. А вообще, ошибся. Там "break метка", а не goto.
                      Ответить
        • http://golang.org/doc/faq#no_pointer_arithmetic
          Пайк и Томпсон - определённо неосиляторы
          Ответить

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