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

    +1014

    1. 1
    2. 2
    3. 3
    4. 4
    if (strlen(Uid.c_str()) > 0)
    {
      // ...
    }

    собственно, std::string Uid;

    Запостил: JeremyW, 27 Октября 2011

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

    • Да ладно, просто if (strlen(Uid.c_str()))? Тут чуть-чуть плохо пахнет.
      Ответить
    • это еще что. у нас в одном проекте код напичкан `if (str.c_str() != NULL)` после присваивания строк. когда первый раз увидел, мне понадобилось несколько минит что бы понять что именно этим хотели сказать.

      ЗЫ к слову. не стоит забывать что код сверху, не смотря на то что навярняка говно, все же имеет смысл в некоторых ситуациях: std::string может содержать '\0'.
      Ответить
      • >несколько минит
        интересно ... в какой букве опечатка
        Ответить
      • И какой же смысл имеет использование strlen на строке, для которой \0 - допустимый символ? Разве что разбитие на подстроки, если \0 - разделитель (где-то в винде я такое извращение видел).
        Ответить
        • да. если часть бинарного буфера внутри std::string есть строка с 0 терминатором.

          я как-то раз std::string использовал для парсинга двоичного протокола. до strlen() я не опускался, но std::string::find_first_of и его друзьями я пользовался.
          Ответить
        • Щас придёт Тарас и скажет, что сишные строки отстой, а паскалевские строки - кул.
          Ответить
        • там есть даже хуже, http://msdn.microsoft.com/en-us/library/windows/desktop/aa365240(v=vs.85).aspx#movefile_write_th rough
          Ответить
      • Я тупой. Мне нескольких минит не хватило.
        Ответить
      • >if (str.c_str() != NULL)
        Мне сразу стало все ясно, если это не std::w\string, а свой кривой велосипед.
        Ответить
        • при чем тут std::wstring?

          c_str() метод может вернуть NULL только если выделение памяти обломалось. но если выделение памяти обломалось, то будет брошен эксепшн.
          Ответить
          • g++ -fno-exceptions
            Ответить
            • С++ без исключений является не С++, а каким то новым кастрированым языком.

              которым я к слову пользовался - в те времена когда просто добавления try/catch делало програму в пару раз медлнее. мало приятного когда прога слетает полностью по первому брошеному исключению в какой внешней либе.
              Ответить
            • -fno-exceptions выключает исключения только в текущем коде. Исключения, которые бросает libstdc++ им не выключаются. Скомпилируй с этим ключом и убедись.
              #include <limits>
              
              int main()
              {
                  char * p = new char[std::numeric_limits<unsigned long>::max()];
              }
              Ответить
    • И конечно же опять с ГК.ру...
      Мне вот интересно, говнодев филиал говнокода или наоборот?
      Ответить
    • Где здесь С++?
      Ответить
    • показать все, что скрытоvanished
      Ответить

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