Кресты / Говнокод #9596 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
// easy-to-use function for use printf-formatting with stl-strings
std::string StrFormat(const char* fmt,...);

void MakeBackup(const char* dataTime)
{
	std::string name = StrFormat("%s", dataTime);
	...
}

Запостил: lifemaker lifemaker, (Updated )

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

  • есть мнение, что вот эта easy-to-use fuckntion for use printf-formatting наверняка достойна отдельного ГК
    Ответить
    • на самом деле нет. нормальная там имплементация.
      сама идея этой функции чуток спорная. но для использования в некритичных местах - удобна и надёжна.
      если интересно имплементацию посмотреть - она здесь http://sourceforge.net/projects/popcapframework/
      у нас чуток допиленная версия, но принципиальных изменений там нет
      Ответить
      • посмотрел
        автор в цикле выделяет буфер, пишет в него через vsnprintf, и смотрит, всё ли влезло, если не влезло - realloc буфера в 2 раза больше, повторить
        это всё описывается в файле Common.h/.cpp, где кроме вышеописанного есть еще примитивы работы со строками, с xml, файловой системой, ГПСЧ, велосипед для htonl/htons, в общем, крайне полезный файлик, здорово, что всё нужное сразу в нем
        всё это обёрнуто в namespace Sexy {...}
        еще немножко, простите:
        #define sexystrncmp			strncmp
        #define sexystrcmp			strcmp
        #define sexystricmp			stricmp
        #define sexysscanf			sscanf
        #define sexyatoi			atoi
        #define sexystrcpy			strcpy
        typedef std::string   SexyString;
        typedef SexyString::value_type   SexyChar;
        #define HAS_SEXYCHAR

        вот ведь что спермотоксикоз с людьми делает
        Ответить
            • прежде всего, использовать *printf под с++ плохо, т.к. это небезопасно и работает только с POD типами
              если очень очень очень хочется форматированного вывода, то советую обратить внимание на boost::format, это C++-way, типобезопасно и вообще гораздо богаче функционал

              ну а под тёплой ламповой сишечкой в некоторых системах (началось с *bsd, затем вроде glibc подтянулся) есть *asprintf, которая сама выделит буфер - обычно реализовано через vfprintf в файл/поток, расположенный в памяти
              в стандарте она отсутствует, но типобезопасность там такая же никчемная
              Ответить

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

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8