LINUX.ORG.RU

man <функция>

нужно только поставить соответствующий комплект man pages (linux programmer manual)

секции страниц - 2 и 3

Sylvia ★★★★★
()
Ответ на: комментарий от Sylvia

не, поищи сама - по слову safe - нету там описания. по крайней мере у меня в debian. а у тебя есть?

quest ★★★★
() автор топика

функции printf GNUC не thread-safe.

Потому что некоторые из них используют буферизованный ввод/вывод, и все они используют расширения из printf.h. То есть используя printf вы не знаете наверняка дёргается-ли где то внутри него переопределённый обработчик формата или преобразования, которые могут быть и не thread-safe.

MKuznetsov ★★★★★
()
Ответ на: комментарий от pathfinder

Может лучше вместо sprintf() использовать snprintf()?

в идеале наверно да, но на практике я обычно выделяю статический char buf[] заведомо большего размера. а с snprintf придется выделять буфер malloc, анализировать что вернул snprintf и в случае если ему не хватило места делать free и malloc с большим размером... типа:

char buf[256];
sprintf (buf, "%lu", int(2010));

против:

size_t size = 10;
for(;;)
{
    char* p=(char*)malloc(size);
    if (p == NULL) return -1;
    int rc = snprintf (p, size, "%lu", int(2010));
    free(p);
    if (rc >= size)
    {
        size += 10;
        continue;
    }
    break;
}

quest ★★★★
() автор топика
Ответ на: комментарий от quest

Вы таки хотите сказать, что

char buf[256];
snprintf (buf, 255, "%lu", int(2010));
не работает?

Я вообще обычно делаю malloc(1025) и спокойно snprintf(buf, 1024, ...)

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от quest

в идеале наверно да, но на практике я обычно выделяю статический char buf[] заведомо большего размера.

Я тоже завожу буфер заводомо большего размера (точнее надеюсь, что места хватит). Пишу обычно так:

char buf[256];
snprintf (buf,sizeof(buf), "%lu", int(2010));

Чем тебе такой вариант не устраивает? ИМХО sprintf вообще использовать нельзя ни в каких случаях.

pathfinder ★★★★
()
Ответ на: комментарий от quest

Вообще в идеале надо анализировать возврат функции snprintf() и если не хватило места в буфере, то завершать приложение с сообщением на консоли «Bla-bla-bla на такие длинные строки мы не рассчитывали».

pathfinder ★★★★
()
Ответ на: комментарий от pathfinder

«на всякий пожарный» :) Хотя, конечно, хватит и malloc(1024), все равно завершающий нуль тоже считается.

Eddy_Em ☆☆☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.