ins52
От: Аноним  
Дата: 25.03.09 10:49
Оценка:
что то вроде этого:
string std_format(const char* pFrmString, ...)
{
    //------------------------------------------------------------- аналог CString::Format (ANSI)
    //pFormatString -------------------------------------------------------- форматируемая строка
    //... ---------------------------------------------------------------------- набор параметров
    //*******************************************************************************************
    string outStr;
    outStr.clear();
    size_t pFrmSize = strlen(pFrmString);
    if(pFrmSize == NULL)                    // нет строки для форматирования, очищаем строку
    {
        return outStr;
    }

    va_list args;
    va_start(args, pFrmString);
    size_t pNewLen   = _vscprintf(pFrmString, args);
    size_t pNewSize  = (pNewLen + 1) * sizeof(char);
    char* pFrmBuffer = (char*) malloc(pNewSize);
    if(pFrmBuffer)
    {
        memset(pFrmBuffer, 0, pNewSize);
        int charswritten = vsprintf(pFrmBuffer, pFrmString, args);
        if(charswritten == (int)pNewLen)                // успешно
        {
            outStr.assign(pFrmBuffer);
            free((void*)pFrmBuffer);
            va_end(args);
            return outStr;
        }
        free((void*)pFrmBuffer);                        // ошибка, не все символы скопировались
    }
    va_end(args);
    return outStr;
}
Re: ins52
От: Кодт Россия  
Дата: 25.03.09 13:48
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>что то вроде этого:


Ну тогда уж выделять память не в malloc/free, а в std::vector<char>.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.