avva: (Default)
[personal profile] avva
А вот тех, кто пишет printf(str) вместо printf("%s", str), мы будем бить по пальцам линейкой.

Особенно когда в str совершенно случайно обнаруживается знак процента вместе с какими-то другими случайными буквами.

Date: 2007-10-29 07:49 am (UTC)
From: [identity profile] gershshpraihler.livejournal.com
без связи с сутью, меня всегда коробит от этого выражения.

Date: 2007-10-29 07:53 am (UTC)
From: [identity profile] vyhuhol.livejournal.com
От sprintf без формата?

Date: 2007-10-29 07:57 am (UTC)
From: [identity profile] gxk.livejournal.com
обязательно отправить на курс по С :)

но что же тогда делать

Date: 2007-10-29 07:59 am (UTC)
From: [identity profile] a-shen.livejournal.com
с теми, кто придумал функцию sprintf с такими свойствами?

Re: но что же тогда делать

Date: 2007-10-29 08:02 am (UTC)
From: [identity profile] getman.livejournal.com
В смысле ? Как функция должна знать передали ли ей параметр константой или через переменную ?

(no subject)

From: [identity profile] aburachil.livejournal.com - Date: 2007-10-29 12:37 pm (UTC) - Expand

(no subject)

From: [identity profile] cmm.livejournal.com - Date: 2007-10-29 01:04 pm (UTC) - Expand

Date: 2007-10-29 08:00 am (UTC)
From: [identity profile] getman.livejournal.com
Даже не думал что так можно :)

Date: 2007-10-29 08:02 am (UTC)
From: [identity profile] ablinov.livejournal.com
А разве скомпилируется?

Date: 2007-10-29 08:36 am (UTC)
From: [identity profile] avva.livejournal.com
Кстати, есть языки, где sprintf - функция без дополнительного аргумента, возвращающая всю построенную строку. Но неважно, считайте, что printf - я там ниже объяснил.

Date: 2007-10-29 08:04 am (UTC)
From: [identity profile] fantaseour.livejournal.com
Эти люди не хлебнули вебдева с его инъекциями и прочими заморочками пользовательского ввода.

Date: 2007-10-29 08:05 am (UTC)
From: [identity profile] catpad.livejournal.com
По-моему, всё равно первого параметра не хватает.

Date: 2007-10-29 08:34 am (UTC)
From: [identity profile] avva.livejournal.com
Я сначала написал printf, а потом не подумав исправил на sprintf; просто суть в том, что там не printf, а определенный printf-like метод класса. Сейчас исправлю обратно на printf.

Date: 2007-10-29 08:06 am (UTC)
From: [identity profile] muchacho.livejournal.com
А sprintf(str) вообще скомпилируется? ;)
Да и sprintf("%s", str), кажется, тоже не должно. Лучше не надо, во всяком случае.

В остальном же полностью поддерживаю.

Date: 2007-10-29 08:36 am (UTC)
From: [identity profile] avva.livejournal.com
см. ответ на предыдущий коммент.

Date: 2007-10-29 08:12 am (UTC)
From: [identity profile] nchaly.livejournal.com
И иногда совсем даже не случайно - http://www.xakep.ru/magazine/xs/045/032/1.asp

Date: 2007-10-29 08:33 am (UTC)
From: [identity profile] amarao-san.livejournal.com
за использование sprintf ("%s") следует бить ровно так же. От того, что оно упадёт не сразу же, а в особо экзотической длине str, легче не станет.

Date: 2007-10-29 01:24 pm (UTC)
From: [identity profile] itman.livejournal.com
На эту тему бывают вообще просто-таки клинические случаи. Один товарищ убеждал меня, что он в большинстве случаев точно знает длину. И тогда использует sprintf. Я был даже готов ему поверить, но valgrind обнаружил один такой случай, когда он промахивается на байт.

Date: 2007-10-29 08:45 am (UTC)
From: (Anonymous)
А я бы еще линейкой настучал слишком умным компиляторам ( не помню какой это был ) который мне в тесте самостоятельно printf("something"); // это чисто для отладки было
заменил на puts("something")
В течении наверно часа тупил, почему текст выводится а на бряк в printf не попадает (под gdb)

Date: 2007-10-29 08:47 am (UTC)
From: [identity profile] drlazy.livejournal.com
А я бы еще линейкой настучал слишком умным компиляторам ( не помню какой это был ) который мне в тесте самостоятельно printf("something"); // это чисто для отладки было
заменил на puts("something")
В течении наверно часа тупил, почему текст выводится а на бряк в printf не попадает (под gdb)

Date: 2007-10-29 09:06 am (UTC)
From: [identity profile] migmit.livejournal.com
А линейкой настучать тем, кто не включает спецфлаги компилятора для отладки?

(no subject)

From: [identity profile] mopexod.livejournal.com - Date: 2007-10-29 09:20 am (UTC) - Expand

(no subject)

From: [identity profile] cmm.livejournal.com - Date: 2007-10-29 09:31 am (UTC) - Expand

(no subject)

From: [identity profile] mopexod.livejournal.com - Date: 2007-10-29 09:45 am (UTC) - Expand

(no subject)

From: [identity profile] cmm.livejournal.com - Date: 2007-10-29 09:52 am (UTC) - Expand

(no subject)

From: [identity profile] mopexod.livejournal.com - Date: 2007-10-29 10:40 am (UTC) - Expand

(no subject)

From: [identity profile] cmm.livejournal.com - Date: 2007-10-29 11:02 am (UTC) - Expand

(no subject)

From: [identity profile] mfi.livejournal.com - Date: 2007-10-29 12:25 pm (UTC) - Expand

(no subject)

From: [identity profile] stepancheg.livejournal.com - Date: 2007-11-03 12:10 am (UTC) - Expand

(no subject)

From: [identity profile] squadette.livejournal.com - Date: 2007-10-29 10:10 am (UTC) - Expand

(no subject)

From: [identity profile] squadette.livejournal.com - Date: 2007-10-29 10:11 am (UTC) - Expand

Date: 2007-10-29 09:07 am (UTC)
From: [identity profile] migmit.livejournal.com
Конечно, надо писать putStrLn str.
Ну, в САМОМ крайнем случае - cout << str, если уж совсем невмоготу.

Date: 2007-10-29 09:16 am (UTC)
From: [identity profile] uzt-nus.livejournal.com
подозреваю что раговое идёт про ANSI C , а не C++

(no subject)

From: [identity profile] migmit.livejournal.com - Date: 2007-10-29 10:01 am (UTC) - Expand

Date: 2007-10-29 09:14 am (UTC)
From: [identity profile] uzt-nus.livejournal.com
2 момента.
1. gcc -Wall половину данной проблеммы улавливает (% в str) и кричит.
2. snprintf

Решает большинство проблем со стрингами в С.
Можно также и линто пробежаться.

угу

Date: 2007-10-29 09:18 am (UTC)
From: [identity profile] fenikso.livejournal.com
Отдельной когортой идут те, кому надо бить по рукам за использование sprintf вместо snprintf...

Re: угу

Date: 2007-10-29 09:25 am (UTC)
From: [identity profile] drlazy.livejournal.com
ну почему, иногда бывает адекватно. Особенно если только числа в форматную строку подставляются.

(no subject)

From: [identity profile] fenikso.livejournal.com - Date: 2007-10-29 09:32 am (UTC) - Expand

(no subject)

From: [personal profile] spamsink - Date: 2007-10-29 05:22 pm (UTC) - Expand

Re: конечно тоже вариант

From: [personal profile] spamsink - Date: 2007-10-29 06:39 pm (UTC) - Expand

Re: конечно тоже вариант

From: [personal profile] spamsink - Date: 2007-10-29 07:26 pm (UTC) - Expand

(no subject)

From: [identity profile] fenikso.livejournal.com - Date: 2007-10-29 05:29 pm (UTC) - Expand

Date: 2007-10-29 09:22 am (UTC)
From: [identity profile] mopexod.livejournal.com
Как раз пару недель назад сам написал так, и сам немедленно побил себя линейкой... :)

Date: 2007-10-29 09:51 am (UTC)
From: [identity profile] deadkittten.livejournal.com
Прямо "printf injection" :)

Date: 2007-10-29 10:02 am (UTC)
ak_47: (Default)
From: [personal profile] ak_47
По-моему надо линейкой бить за чрезмерное использование printf там где это не требуется. Нет форматирования - зови puts(str) и дело с концом.

Date: 2007-10-29 12:30 pm (UTC)
From: [identity profile] dmarck.livejournal.com
О-о, classic format bug. Знакомое ощущение (про "по пальцам линейкой")

Date: 2007-10-29 12:34 pm (UTC)
From: [identity profile] aburachil.livejournal.com
Вы таких в гугль работать берёте? Ой-вей, ужоснах....

Date: 2007-10-29 12:36 pm (UTC)
From: [identity profile] bamsic.livejournal.com
Забавно, всегда писал второй вариант, хотя сейчас осознаю, что первый тоже работоспособен... :-)

Date: 2007-10-29 02:50 pm (UTC)
From: [identity profile] ygam.livejournal.com
Это был little Bobby Tables.

Date: 2007-10-29 05:31 pm (UTC)
From: [identity profile] fenikso.livejournal.com
%) sanitize database inputs

Date: 2007-10-30 08:27 am (UTC)

Date: 2007-11-05 09:38 pm (UTC)
From: [identity profile] bulldozerier.livejournal.com
Вам стоило упомянуть, что str — переменная, а не литерал, иначе первым линейкой получит Керниган.

Date: 2010-09-26 06:46 am (UTC)
From: [identity profile] vitolduv.livejournal.com
Мне нравятся линейки для жж (http://flines.ru/kak-sozdat-lineiku), на сайте можно загружать свои бегунки, сервис в том году появился, а уже имеет огромную публику

February 2026

S M T W T F S
1 2 3 4 5 67
8 9 10111213 14
15 16 17 18192021
2223 2425262728

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 24th, 2026 11:05 am
Powered by Dreamwidth Studios