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

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
char stmt[1024];
int offset = 0;
// ...
for ( int count = 1 ; ; )
{
    offset += sprintf(stmt + offset , "$%d" , count);
    count ++;
    if ( count > p_max )
    {
        break;
    }
    offset += sprintf(stmt + offset , ",");
}

Сборка строки вида "$1,$2,$3,$4" для запроса к PostgreSQL.

Q: Где здесь с++, bormand?
A: Проект написан на с++.

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

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

  • Где здесь говно, bormand? (Ну, за исключением цикла довольно странного вида).
    Ответить
    • 1) В цикле довольно странного вида.
      2) В использовании сяшных функций в коде на с++.

      P.S. Идиому sprintf-builder ругать рука не поднимется. Все-таки сяшный олдскул, а я его люблю.
      Ответить
      • Вот так хотя бы:
        for (int count = 1; count <= p_max; count++) {
            if (count != 1) {
                offset += sprintf(stmt + offset , ",");
            }
            offset += sprintf(stmt + offset , "$%d" , count);
        }
        Ответить
      • > Q: Где здесь с++, bormand?
        > A: Проект написан на с++.
        > 2) В использовании сяшных функций в коде на с++.
        Так может это на самом деле Си код, который поместили в файлы .cpp и собирают плюсовым компилером?
        Ответить
  • А sprintf здесь очень даже няшка. Возьму на вооружение, правда в виде snprintf.
    Ответить
    • Раз уж проект на плюсах, то почему бы здесь не использовать stringstream?
      Ответить
      • > то почему бы здесь не использовать stringstream
        Вот и я о том же. Хотя, возможно, он будет чуть-чуть медленней, но это не так важно. Один фиг запросы исполняются намного дольше, нежели составляется.
        Ответить
        • P.S. А вот для С это неплохой прием (если переделать на snprintf конечно).
          Ответить
            • stringstream сам управляет размером буфера. Так что «удобство и краткость». C snprintf все это придется реализовывать самому.
              Ответить
            • Кстати еще и безопасность - т.к. код в исходном варианте способен вызвать переполнение буфера (если функции передать неудачные параметры).
              Ответить
                • Ну для нее, для разработчика и для пользователя они неудачные. А для злоумышленника - вполне удачные 😉
                  Ответить
  • Странно это, почему 721 борт не отписывается?
    Что-то задумал и помалкивает?
    Или чего-то не знаю?
    Ответить
    • 721 это я штоле?
      Типичное сишкоговно, что тут сказать...
      Ответить

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

Помни, guest, за тобой могут следить!

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


    8