Есть
Консольная Win32-программа (Сервер). Программа активно протоколирует свою работу (и шлет свои состояния по сети) с помощью ф-ции sprintf. Однако,
Проблема
Были случаи, когда программа выпадала именно на этой ф-ции. Например, если указываю "%s %d", а по ошибке передаю "PktNumber, ClnName" (т.е. в обратном порядке). Ну и банальные переполнения буфера и NULL'ы, плюс проблема если в данных встречается символ '%'... Дополнительная сложность в том, что некоторые sprintf'ы отвечают за ошибки, и, соответственно, исполняются (или валят программу) когда эти ошибки происходят — воспроизвести же все ошибки при тестировании не всегда представляется возможным (XP-шную идею тестов изучил совсем недавно). Отсюда,
Вопрос
Как красиво решить проблемы с надежностью? При этом, крайне желательно:
— сохранить простоту вызова ф-ции форматирования (а'ля вызов ОДНОЙ ф-ции)
— не использовать внешние библиотеки (MFC, в частности)
— корректная работа ф-ции, если она получила в кач-ве параметра NULL или указатель на память вне программы (тут, я понимаю, надо как-то отлавливать Memory read access error)
— использовать компилятор MS VC 6.0, но иметь совместимость с BCB и Watcom.
Полазив по форуму, я нашел _sNprintf, она решает проблему буфера, но не решает проблему NULL и перепутанного порядка аргументов (тут в программе менял формат протоколирования: переделал более 200 операторов sprintf — мрак какой-то!

).
Еще вариант "cout << Data", но это не очень удобно и нужен вывод именно в строку, а не в консоль. Какие есть варианты?!
P.S. Как говориться, рассмотрю любые предложения!