The following snippet has been a part of my personal code library for years. It is useful for formatting a std::string in a traditional printf()way. For all its ills, printf/sprintf() is incredibly convenient. This code is for Win32. Minor modification is required for Unix.
#include <stdio.h>
#include <stdarg.h>
#include <string>
std::string format_arg_list(const char *fmt, va_list args)
{
if (!fmt) return "";
int result = -1, length = 256;
char *buffer = 0;
while (result == -1)
{
if (buffer) delete [] buffer;
buffer = new char [length + 1];
memset(buffer, 0, length + 1);
result = _vsnprintf(buffer, length, fmt, args);
length *= 2;
}
std::string s(buffer);
delete [] buffer;
return s;
}
std::string format(const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
std::string s = format_arg_list(fmt, args);
va_end(args);
return s;
}
반응형
'C, C++' 카테고리의 다른 글
[Modern C++] lvalue와 rvalue의 이해 (0) | 2016.09.09 |
---|---|
[스크랩][C, C++] C++의 람다 식 (0) | 2016.01.30 |
[C, C++] More Effective C++ Item28 : Smart Pointer (0) | 2014.03.30 |
[C++][추후 추가해야 함] More Effective C++ Item 26 : 클래스 인스턴스의 개수를 의도대로 제한하는 방법 (0) | 2014.03.16 |
[C++] More Effective C++ Item 25 : 생성자 함수와 비 멤버 함수를 가상 함수처럼 만드는 방법 (0) | 2014.03.16 |
How to output long long or int64? (2) | 2014.03.03 |
[C++][STL] string documentation. (0) | 2014.01.15 |
[Windows32 API] Dialog 박스와 CreateWindow 같이 쓸 때 (0) | 2013.05.13 |
[C, C++][Windows] 윈도우 종료시 콜스택 [KernelBase.dll 에 첫째 예외가 있습니다] (0) | 2013.05.09 |
[C, C++][스크랩] #pragma warning (0) | 2013.04.18 |