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

    +160

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    std::string ScriptInfo::GetDebugInfo() const
    {
        char sz[256];
        sprintf(sz, "%s ('%s' script id: %u)", GetScriptCommandName(command).c_str(), GetScriptsTableNameByType(type).c_str(), id);
        return std::string(sz);
    }

    Может, не совсем говнокод, но меня от подобного коробит.

    Запостил: Oops, 17 Октября 2010

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

    • тогда stringstream
      Ответить
    • >>char sz[256];
      :))) а почему не 42? Паскалист детектед?
      Ответить
      • Какая связь с паскалистом ? Максимальная длина строки?
        Ответить
        • ага)
          Ответить
          • Ну это не показатель. Просто привычнее как-то давать размеры кратные степени двойки. И минимально достаточные для результирующей стоки.
            Ответить
      • fail. TP-string - 255 чаров, не 256
        Ответить
        • 256-ой нулевой терминатор. Так что информационных 255.
          selffail, bugmenot :)
          Ответить
          • В памяти ЭВМ строка занимает количество байтов, на единицу большее ее длины. Нулевой байт строки содержит ее длину.

            http://wm-help.net/books-online/print-page/79769/79769-11.html

            ++fail;
            Ответить
            • Я говорил про С-строку из ГК, а не про TP-строку.
              Ответить
            • TP-строка символов "вы ебанитесь!" предваряется символом "\r" и это символизирует
              Как бы смягчающим и увлажняющим обстоятельством является то, что это был первый managed тип броланда и придумано это был в 1980-х. Но не пример для подражания ни разу

              мм, учебник по трубопаскакалю на сайтике "в помощь уеб-мастеру" :)
              Ответить
        • вебкил, перелогинтесь)
          Ответить
    • Жесть, из функций возвращающих std::string брать const char* чтобы потом склеить их sprintf'ом в массив чаров(char sz[256];) и из всего этого опять создавать std::string... ебануться.

      std::string ScriptInfo::GetDebugInfo() const
      {
        return GetScriptCommandName(command) +
        " ('" + GetScriptsTableNameByType(type) + "' script id: " +
        boost::lexical_cast<std::string>(id) + ")";
      }
      Ответить
      • Капитан какбэ заявляет, что буст говно.
        Ответить
      • Ну тоже так еще какаха. Есть std::stringstream для сбора строк в кучу и к тому же работает быстрее, чем конкатенатить строки. Да и использования boost::lexical_cast<std::string> в этом контексте очень большая какаха, т.к. работает примерно так
        int id;
        std::string out;
        std::stringstream ss;
        ss << id;
        ss >> out;

        Получаем
        std::string ScriptInfo::GetDebugInfo() const
        {
          std::stringstram ss;
          ss
            << GetScriptCommandName(command)
            << " ('"
            << GetScriptsTableNameByType(type)
            << "' script id: "
            << id
            << ")";
          return ss.str();
        }
        Ответить

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