spamsink: (Default)
[personal profile] spamsink

Какого, спрашивается, рожна этот велосипед приходится постоянно изобретать?
Почему он не в стандартной библиотеке с самого начала? Что за бессмысленное чистоплюйство?
std::string format(const char * form, ...) {
    const int bufsize = 1024;
    char buf[bufsize];
    std::string ret;
    va_list al, al_copy;
    va_start (al,form);
    va_copy (al_copy, al);
    int need = vsnprintf(buf, bufsize, form, al) + 1;
    if (need <= bufsize) {
        ret = buf;
    } else {
        char dyn[need];
        vsprintf(dyn, form, al_copy);
        ret = dyn;
    }
    va_end(al_copy);
    va_end(al);
    return ret;
}
Page 1 of 3 << [1] [2] [3] >>

Date: 2012-08-09 05:15 am (UTC)
oryx_and_crake: (Default)
From: [personal profile] oryx_and_crake
неужели нету конструктора с параметром типа строка? не может быть.

Date: 2012-08-09 05:39 am (UTC)
oryx_and_crake: (Default)
From: [personal profile] oryx_and_crake
у std::string конструктора. вызвать его с параметром "строка, заканчивающаяся нулем". вы ведь пытаетесь строку в std::string скопировать, или я уже совсем разучилась русскому языка говорить сиплюсплюса программа писать?

Date: 2012-08-09 05:42 am (UTC)
oryx_and_crake: (Default)
From: [personal profile] oryx_and_crake
а! ну тогда не жалуйтесь...
:-)

Date: 2012-08-09 12:05 am (UTC)
yigal_s: (Default)
From: [personal profile] yigal_s
как можно? C++ и printf - это верх некашерности!

Полагается использовать всякие streams! Уже 20 лет как.

Date: 2012-08-09 12:23 am (UTC)
From: [identity profile] oldjackaroo.livejournal.com
"Можно это сделать старым грязным некошерным способом через тег table. Будет работать через 5 минут, но все веб-дизайнеры тебя заплюют. А можно сделать это чистым, красивым и современным способом, через css, и всего через каких-то пять часов оно заработает."

Date: 2012-08-09 12:24 am (UTC)
yigal_s: (Default)
From: [personal profile] yigal_s
C++ не выбирает лёгких путей.

Date: 2012-08-09 12:24 am (UTC)
From: [identity profile] oldjackaroo.livejournal.com
"Собакам и программистам не на С++ вход воспрещен"
Таким образом, предполагается, что существуют собаки, программирующие не на С++. :)

Date: 2012-08-09 12:42 am (UTC)
From: [identity profile] oldjackaroo.livejournal.com
Ну да, можно понять как "(Собакам и программистам) ((не (на С++)) (вход воспрещен))".

Тогда возникает вопрос, куда именно воспрещен вход собакам и программистам. Типа "не на С++ вход запрещен собакам и программистам, а на гору Сион".

Date: 2012-08-09 12:51 am (UTC)
From: [identity profile] oldjackaroo.livejournal.com
Т.е. виртуальным собаками, написанным на С++, нельзя заходить, а написанным на питоне - можно?

(Лучше было бы "Собакам и программистам не на питоне вход воспрещен". Сразу представил себе собаку, пытающуюся оседлать питона, чтобы таки зайти...)

Date: 2012-08-09 04:17 am (UTC)
stas: (Default)
From: [personal profile] stas
asprintf?

Date: 2012-08-09 05:41 am (UTC)
From: [identity profile] vaddimka.livejournal.com
Вообще, это плохая практика - не type safe, никакой проверки на этапе компиляции.

Лучше вот так http://pastebin.com/G1KhB4jz

потом можно писать что-то типа
std::string string = StringFormatter() << "Text " << 567;
фактически, такую конструкцию можно использовать в любом месте где ожидается строка, автоматически прикастуется

Date: 2012-08-09 06:19 am (UTC)
From: [identity profile] vaddimka.livejournal.com
sprinf использовать крайне не рекомендуется, в крайнем случае - snprintf

Я не совсем понимаю какого поведения есть желание добиться, .* - это число знаков после запятой, оно не относится к строкам.

No title

Date: 2012-08-09 07:06 am (UTC)
From: [identity profile] livejournal.livejournal.com
User [livejournal.com profile] baramin referenced to your post from No title (http://baramin.livejournal.com/122195.html) saying: [...] ;  return ret; } <code> <a href="http://spamsink.livejournal.com/446926.html [...]

Date: 2012-08-09 08:14 am (UTC)
From: [identity profile] vaddimka.livejournal.com
Форматы фиксированной длины типа "%08X" еще никто не отменял

Я согласен, но практика показывает, что код после написания попадает в руки менее опытных/внимательных людей, которые дорабатывая его согласно новым спекам, обязательно выйдут за границы буфера. Баг может быть не обнаружен даже при тестировании, однако проявиться потом в каких-то специфических условиях, при которых добавленная в формат строка будет иметь достаточную длину.

man printf, да?

Да, не нашел сходу. Тем не менее, какого поведения нужно достичь с отрицательными значениями? Очень похоже на то, что это gcc-specific.

Date: 2012-08-09 11:24 am (UTC)
From: [identity profile] dz.livejournal.com
printf пережил си, это факт. в яве он тоже уже есть.
Page 1 of 3 << [1] [2] [3] >>

Profile

spamsink: (Default)
spamsink

February 2026

S M T W T F S
12345 67
8 91011 121314
15161718 192021
22 2324 25262728

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 5th, 2026 07:53 am
Powered by Dreamwidth Studios