加载中…
个人资料
斯托克
斯托克
  • 博客等级:
  • 博客积分:0
  • 博客访问:81,535
  • 关注人气:49
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

wsprintf swprintf重要区别(转)

(2013-01-11 22:30:56)
标签:

it

分类: 程序
wsprintf swprintf重要区别


对于wsprintf   swprintf这两函数都是宽字符版本的,就unicode版本的格式化字符串函数。

 

对于该函数的使用方法,我在这里就不赘述了,我在这里只讲讲他们的之间最重要的区别在于:

 

 

swprintf()函数格式化字符串可以格式化浮点型,而wsprintf()不能。

 

举例说明:

 

 

  1. WCHAR   buf;  
  2. buf1[128];  
  3. buf2[128];  
  4. float  version 3.0;  
  5.   
  6. wsprintf(buf1, "feiyinzilgdV %.2f"version);  
  7. swprintf(buf2, "feiyinzilgdV %.2f"version);  
  8.   
  9.   

 

 

可见,wsprintf()是无法格式化浮点型数据的。




 

转换字符

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
%% 印出百分比符号,不转换。
%c 整数转成对应的 ASCII 字元。
%d 整数转成十进位。
%f 倍精确度数字转成浮点数。
%o 整数转成八进位。
%s 整数转成字符串。
%x 整数转成小写十六进位。
%X 整数转成大写十六进位。
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
$money = 123.1
$formatted = sprintf (".2f", $money); // 此时变数 $ formatted 值为 "123.10"
$formatted = sprintf (".2f", $money); // 此时变数 $ formatted 值为 "00123.10"
$formatted = sprintf ("%-08.2f", $money); // 此时变数 $ formatted 值为 "123.1000"
$formatted = sprintf ("%.2f%%", 0.95 * 100); // 格式化为百分比
.2f 解释:
%开始符
0是 "填空字元" 表示,如果长度不足时就用0来填满。
8格式化后总长度
2f小数位长度,即2位
第3行值为"00123.10" 解释:
因为2f是(2位)+小数点符号(1位)+前面123(3位)=6位,总长度为8位,故前面用[填空字元]0表示,即00123.10
第4行值为"123.1000" 解释:
-号为反向操作,然后填空字元0添加在最后面了



Example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
#include <stdio.h> 
#include <wchar.h> 
int main () 
{
 wchar_t buffer [100];
 int cx;
 cx = swprintf ( buffer, 100, L"The half of %d is %d", 80, 80/2 );
 swprintf ( buffer+cx, 100-cx-1, L", and the half of that is %d.", 80/2/2 );
 fputws ( buffer, stdout );
 return 0;
 }


Output:
The half of 80 is 40, and the half of that is 20. 


-------------------------------------------------------------------------------------------------------

       今天在编写文件读写的代码时,遇到了这样的一个情况。

    HANDLE hFile;

    TCHAR szMsg[50];

    hFile = CreateFile(lpFileName, GENERIC_READ | GENERIC_WRITE, 0, NULL,

       OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

    if(hFile == INVALID_HANDLE_VALUE)

    {

       wcscat(szMsg, _T("打开文件"));

       wcscat(szMsg, lpFileName);

       wcscat(szMsg, _T("失败!"));

       MessageBox(szMsg);

    }

    代码执行的情况,如图:

http://hi.csdn.net/attachment/201005/27/0_1274924672T8sl.gifswprintf重要区别(转)" />

    前面出现了几个方格,然后将第一个wcscat修改为wcscpy。即:

    wcscpy(szMsg, _T("打开文件"));

    执行了一下,如图:

http://hi.csdn.net/attachment/201005/27/0_12749246747pJr.gifswprintf重要区别(转)" />

    这回不会出现方格了。看来最初始的字符串还是用wcscpy来添加,追加一个字符串再用wcscat函数。

    同样的功能当然也可以这样写:

    HANDLE hFile;

    CString cszMsg;

    hFile = CreateFile(lpFileName, GENERIC_READ | GENERIC_WRITE, 0, NULL,

       OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

    if(hFile == INVALID_HANDLE_VALUE)

    {

       cszMsg.Format(_T("打开文件%s失败"),lpFileName);

       MessageBox(cszMsg);

    }

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有