在C語言中格式化字符串可以使用printf,但是在WINDOWS編程設計中卻行不通了,但是卻有變通的方法,那就是用 wsprintf這個函數(shù)。它的格式如下:
int wsprintf ( LPTSTR lpOut, // 指向需要輸出的字符串的指針
LPCTSTR lpFmt, //指向格式控制字符串的指針
…… // 其他可選參數(shù)
);
wsprintf(緩沖區(qū), 格式, 要格式化的值);
第一個參數(shù)是字符緩沖區(qū),后面是格式字符串,wsprintf不是將格式化結果寫到標準輸出,而是將其寫入緩沖區(qū)中,該函數(shù)返回該字符串的長度。比如我們想通過MessageBox來輸出一個整形變量的值,可以用以下代碼實現(xiàn):
char szBuffer[100];
ing number=100;
wsprintf(szBuffer, "%d",number);
MessgaeBox(NULL,szBrffer,TEXT("格式化字符串"),0);
這個函數(shù)除了將內容格式化輸出到第一個參數(shù)所提供的字符串緩沖區(qū)以外,其它功能與printf函數(shù)相同。
wsprintf對應的字符串是寬字符型wchar_t,即一個字符占用2個字節(jié)的內存空間。托福答案
sprintf對應的字符串是字符類型為char,即一個字符占用1個字節(jié)的內存空間。
sprintf是用于對ASCII碼的127個字符進行操作,wsprintf是對UNICODE的多語言字符進行操作。如:
sprintf(buffer, "ascii");
wsprintf(buffer, L"unicode");
wsprintf(filepath, L"%s\\%s", folder_name, find_data.cFileName);
wsprintf函數(shù)能夠將一組字符序列按lpFmt參數(shù)指定的格式轉換,然后保存在lpOut參數(shù)指定的字符緩沖區(qū)中等待輸出。其中,字符序列由可選參數(shù)決定,而可選參數(shù)的數(shù)目和具體內容應該與lpFmt所指定的格式一致。
如果wsprintf函數(shù)操作成功,則返回輸出字符的數(shù)目,但這個字符數(shù)目不包括表示結束的NULL標志。如果操作失敗,返回的整數(shù)值將與輸出的字符數(shù)目不相符。
BOOL TextOut( HDC hdc, // 設備描述表句柄 www.sd-gw.com
int nXStart, // 文本輸出起始點 X坐標
int nYStart, // 文本輸出起始點 Y坐標
LPCTSTR lpString, // 指向輸出字符串的指針
int cbString // 字符串中字符的數(shù)目
);
TextOut函數(shù)能夠用當前設定的字體在窗口的指定部位輸出一段文本信息。如果操作成功則返回一非零值,否則返回零值。捕獲鍵盤消息的信息主要根據(jù)表中的描述,通過使用按位操作確定某些特定位的值,然后再判斷具體的狀態(tài)。
wsprintf的用法的一個程序片斷:
int x=6;
LPTSTR szBuffer=new TCHAR[1024];
wsprintf(szBuffer,"%d",x); //將變量x的值格式化為數(shù)字(%d)輸出到緩沖區(qū)szBuffer指向的內存單元。
MessageBox(NULL,szBuffer," ",MB_OK);
格式化規(guī)定符:
%d 格式化為十進制有符號整數(shù)輸出到緩沖區(qū)
%u 格式化為十進制無符號整數(shù)輸出到緩沖區(qū)
%f 格式化為浮點數(shù)輸出到緩沖區(qū)
%s 格式化為字符串輸出到緩沖區(qū)
%c 格式化為單個字符輸出到緩沖區(qū)
%e 格式化為指數(shù)形式的浮點數(shù)輸出到緩沖區(qū)
%x 格式化為無符號以十六進制表示的整數(shù)(a-f小寫輸出)輸出到緩沖區(qū)
%X 格式化為無符號以十六進制表示的整數(shù)(a-f大寫輸出)輸出到緩沖區(qū)
%0 格式化為無符號以八進制表示的整數(shù)輸出到緩沖區(qū)
%g 格式化為自動選擇合適的表示法輸出到緩沖區(qū)
說明:
可以在"%"和字母之間插進數(shù)字表示最大場寬。例如: = 表示輸出3位整型數(shù),不夠3位右對齊。%9.2f 表示輸出場寬為9的浮點數(shù),其中小數(shù)位為2,整數(shù)位為6,小數(shù)點占一位,不夠9位右對齊。%8s 表示輸出8個字符的字符串,不夠8個字符右對齊。如果字符串的長度、或整型數(shù)位數(shù)超過說明的場寬,將按其實際長度輸出。但對浮點數(shù),若整數(shù)部分位數(shù)超過了說明的整數(shù)位寬度,將按實際整數(shù)位輸出;若小數(shù)部分位數(shù)超過了說明的小數(shù)位寬度,則按說明的寬度以四舍五入輸出。另外,若想在輸出值前加一些0,就應在場寬項前加個0.例如: d 表示在輸出一個小于4位的數(shù)值時,將在前面補0使其總寬度為4位。如果用浮點數(shù)表示字符或整型量的輸出格式,小數(shù)點后的數(shù)字代表最大寬度,小數(shù)點前的數(shù)字代表最小寬度。例如: %6.9s 表示顯示一個長度不小于6且不大于9的字符串。若大于9,則第9個字符以后的內容將被刪除。
可以在"%"和字母之間加小寫字母l,表示輸出的是長型數(shù)。例如: %ld 表示輸出long整數(shù),%lf 表示輸出double浮點數(shù)。托福答案
可以控制輸出左對齊或右對齊,即在"%"和字母之間加入一個"-" 號可說明輸出為左對齊,否則為右對齊。例如: %-7d 表示輸出7位整數(shù)左對齊。%-10s 表示輸出10個字符左對齊。
wsprintf只能輸出字符,字符串和整型數(shù)據(jù),要輸出任意類型應該用swprintf
如果為了把float存入CString,
只需:
CString s;
float f= 5.345;
s.Format( "%f", f );
就做得到
wsprintf是Windows API,不支持浮點型格式輸出;swprintf是C運行時函數(shù),支持浮點型格式化輸出。