Я пытаюсь завершить мой класс регистрации. Я написал это с нуля и не хочу использовать какую-либо альтернативную библиотеку. Моя проблема заключается в том, что моему регистратору не удается вывести std::string
с, и он работает только тогда, когда я обозначаю его функцией string.c_str()
.
Вот моя функция вывода файла журнала:
void Log::writeSuccess(char * text,...)
{
// Grab the variables and insert them
va_list ap;
va_start(ap, text);
char buff[BUFFER_SIZE];
vsnprintf(buff, sizeof(buff), text, ap);
// Output to the log
logfile << "<-!-> " << buff << endl;
}
Вот пример вызова моего объекта класса журнала (игнорируйте бесполезность вызова):
string test("This is a test string!");
errorLog.writeSuccess("Output: %s", test);
Я получаю случайные символы и искаженный вывод.
Однако, когда я добавляю строку test
с .c_str()
, текст выводится правильно.
Вся причина, по которой я стараюсь избегать cstrings, заключается в том, что я понимаю, что они не являются кроссплатформенными, и разрабатываю мой клиент для поддержки всех основных операционных систем.
Подведем итог:
Что не так с моей функцией вывода журнала? Вы видите, как это можно улучшить?
Должен ли я вообще избегать c_strings?