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

Особенно когда в str совершенно случайно обнаруживается знак процента вместе с какими-то другими случайными буквами.
Page 1 of 3 << [1] [2] [3] >>

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 с такими свойствами?

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
А разве скомпилируется?

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

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

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

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

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

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

Date: 2007-10-29 08:32 am (UTC)
From: [identity profile] cmm.livejournal.com
компилятор, вообще-то, мог бы и взвякнуть.
функция-то стандартная.

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

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

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

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)

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

Date: 2007-10-29 08:51 am (UTC)
From: [identity profile] kouzdra.livejournal.com
Самое смешное, что GCC вякаяет - но только не в этом случае - если формат - константа - он проверяет соотвествие количества аргументов и их типов формату, но вот на использование переменной в качестве формата не говорит ничего ;)

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

Date: 2007-10-29 08:58 am (UTC)
From: [identity profile] salas.livejournal.com
А потом авторам компилятора разбираться, надо ли вякать на, скажем, fprintf (stderr, format, arg1, arg2, arg3, arg4, arg5); в служебной builtin_error()?

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

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

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

Date: 2007-10-29 09:11 am (UTC)
From: [identity profile] vyhuhol.livejournal.com
Взвякнуть на что? Почему бы в качестве формата не передать переменную?

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:16 am (UTC)
From: [identity profile] uzt-nus.livejournal.com
подозреваю что раговое идёт про ANSI C , а не C++
Page 1 of 3 << [1] [2] [3] >>

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. 25th, 2026 01:02 am
Powered by Dreamwidth Studios