Я пишу небольшую тестовую консольную программу с Visual Studio 2008, и я хотел, чтобы она выводила цветной текст для удобства чтения. Для простоты кодирования я также хотел сделать быструю замену printf, что-то, где я мог бы написать так:
MyPrintf(L"Some text \1[bright red]goes here\1[default]. %d", 21);
Это будет полезно, потому что я также создаю и передаю строки в некоторых местах, чтобы мои строки могли содержать информацию о форматировании.
Однако я столкнулся с wsprintf
, потому что не могу найти функцию, которая позволила бы мне узнать требуемый размер буфера перед передачей его в функцию. Я мог бы, конечно, выделить 1 МБ на всякий случай, но это было бы некрасиво, и я предпочел бы оставить это в качестве решения для резервного копирования, если я не могу найти лучшего способа.
Кроме того, в качестве альтернативы я рассматриваю возможность использования std::wstring
(на самом деле я больше парень C с небольшим опытом работы с C++, поэтому сейчас мне проще использовать обычные массивы символов), но у него нет ничего похожего на wsprintf
, где вы могли бы построить строку с замененными в них значениями.
И что я должен делать?
sprintf()
в течение очень долгого времени. Вот почему C99 добавилsnprintf()
. Хотя вы можете догадываться о длине строки, ее правильное определение требует воссоздания большинства функцийprintf()
. - person David Thornley   schedule 15.02.2010