int sprintf (char * szBuffer, const char * szFormat, ...)
{
int iReturn ;
va_list pArgs ;
va_start (pArgs, szFormat) ;
iReturn = vsprintf (szBuffer, szFormat, pArgs) ;
va_end (pArgs) ;
return iReturn ;
}
{
int iReturn ;
va_list pArgs ;
va_start (pArgs, szFormat) ;
iReturn = vsprintf (szBuffer, szFormat, pArgs) ;
va_end (pArgs) ;
return iReturn ;
}
va_start巨集将pArg设置为指向一个堆叠变数,该变数位址在堆叠参数szFormat的上面。
由於许多Windows早期程式使用了sprintf和vsprintf,最终导致Microsoft向Windows API中增添了两个相似的函式。Windows的wsprintf和wvsprintf函式在功能上与sprintf和vsprintf相同,但它们不能处理浮点格式。
当然,随著宽字元的发表,sprintf类型的函式增加许多,使得函式名称变得极为混乱。表2-1列出了Microsoft的C执行时期程式库和Windows支援的所有sprintf函式。
| 表2-1 |
| ASCII |
在宽字元版的sprintf函式中,将字串缓冲区定义为宽字串。在宽字元版的所有这些函式中,格式字串必须是宽字串。不过,您必须确保传递给这些函式的其他字串也必须由宽字元组成。
格式化讯息方块
程式2-1所示的SCRNSIZE程式展示了如何实作