比如:
m_strFileName.Format("%d时%0.2d分%0.2d秒",system_time.wHour,system_time.wMinute,system_time.wSecond);
解释下m_strFileName.Format()用法演变过程
void __cdecl Format( _Printf_format_string_ UINT nFormatID, ... );
模版
template< typename BaseType, class StringTraits >
inline void __cdecl CStringT<BaseType, StringTraits>::Format( _Printf_format_string_ UINT nFormatID, ... )
{
CStringT strFormat( GetManager() );
ATLVERIFY( strFormat.LoadString( nFormatID ) );
va_list argList;
va_start( argList, nFormatID );
FormatV( strFormat, argList );
va_end( argList );
}
还有一种比较流行的,如下:
void __cdecl Format( _Printf_format_string_ UINT nFormatID, ... )
{
using namespace ATL;
CStringT strFormat( GetManager() );
ATLENSURE( strFormat.LoadString( nFormatID ) );
va_list argList;
va_start( argList, nFormatID );
ThisType tmp;
tmp.FormatV( strFormat, argList );
*this = tmp;
va_end( argList );
}
va_start详细
/* 基本过程:
va_list arglist; //声明一个变量来转换参数列表
va_start(arglist,format); //初始化变量
va_end(arglist); //结束变量列表,和va_start成对使用
可以根据va_arg(arglist,type)取出参数 其中type可以是int,char等等
或 va_start(arglist, format);
status = vsnprintf(buf, 1024, format, arglist); //有些编译器要求写成_vsnprintf
va_end(arglist);
vsnprintf()函数:
int vsnprintf (char *s, size_t size, const char *template, va_list ap)
本函数跟snprintf函数很类似,只是将参数的数目可变的,变成了一个指针的列表。
*/