在C语言中格式化字符串可以使用printf,但是在WINDOWS编程设计中却行不通了,但是却有变通的方法,那就是用 wsprintf这个函数。它的格式如下:
int wsprintf ( LPTSTR lpOut, // 指向需要输出的字符串的指针
LPCTSTR lpFmt, //指向格式控制字符串的指针
…… // 其他可选参数
);
wsprintf(缓冲区, 格式, 要格式化的值);
第一个参数是字符缓冲区,后面是格式字符串,wsprintf不是将格式化结果写到标准输出,而是将其写入缓冲区中,该函数返回该字符串的长度。比如我们想通过MessageBox来输出一个整形变量的值,可以用以下代码实现:
char szBuffer[100];
ing number=100;
wsprintf(szBuffer, "%d",number);
MessgaeBox(NULL,szBrffer,TEXT("格式化字符串"),0);
这个函数除了将内容格式化输出到第一个参数所提供的字符串缓冲区以外,其它功能与printf函数相同。
wsprintf对应的字符串是宽字符型wchar_t,即一个字符占用2个字节的内存空间。
sprintf对应的字符串是字符类型为char,即一个字符占用1个字节的内存空间。
sprintf是用于对ASCII码的127个字符进行操作,wsprintf是对UNICODE的多语言字符进行操作。如:
sprintf(buffer, "ascii");
wsprintf(buffer, L"unicode");
wsprintf(filepath, L"%s\\%s", folder_name, find_data.cFileName);
wsprintf函数能够将一组字符序列按lpFmt参数指定的格式转换,然后保存在lpOut参数指定的字符缓冲区中等待输出。其中,字符序列由可选参数决定,而可选参数的数目和具体内容应该与lpFmt所指定的格式一致。
如果wsprintf函数操作成功,则返回输出字符的数目,但这个字符数目不包括表示结束的NULL标志。如果操作失败,返回的整数值将与输出的字符数目不相符。
BOOL TextOut( HDC hdc, // 设备描述表句柄
int nXStart, // 文本输出起始点 X坐标
int nYStart, // 文本输出起始点 Y坐标
LPCTSTR lpString, // 指向输出字符串的指针
int cbString // 字符串中字符的数目
);
TextOut函数能够用当前设定的字体在窗口的指定部位输出一段文本信息。如果操作成功则返回一非零值,否则返回零值。捕获键盘消息的信息主要根据表中的描述,通过使用按位操作确定某些特定位的值,然后再判断具体的状态。
wsprintf的用法的一个程序片断:
int x=6;
LPTSTR szBuffer=new TCHAR[1024];
wsprintf(szBuffer,"%d",x); //将变量x的值格式化为数字(%d)输出到缓冲区szBuffer指向的内存单元。
MessageBox(NULL,szBuffer," ",MB_OK);
格式化规定符:
说明:
wsprintf只能输出字符,字符串和整型数据,要输出任意类型应该用swprintf
如果为了把float存入CString,
只需:
CString s;
float f= 5.345;
s.Format( "%f", f );
就做得到
wsprintf是Windows API,不支持浮点型格式输出;swprintf是C运行时函数,支持浮点型格式化输出。