sprintf vs wsprintf

来源:互联网 发布:网络中沙发是什么意思 编辑:程序博客网 时间:2024/06/02 12:35
sprintf vs wsprintf

wsprintf很多类型都不支持,比如.lf

wsprintf支持最大的buf长度为1024,sprintf没有限制

所以,除了windows短的调试消息不要用wsprintf,而是用sprintf
 
*****
*****先多回答你一个问题,printf与wprintf的区别与用法。首先,它们的功能其实是一样的,都是格式化一组变量或常量,然后打印到屏幕显示。区别是,wsprintf专为UNICODE设计,其中的foramt参数以及需要打印的字串变量必须是UNICODE字符串,具体使用过程中只需将字串"string"改为_T("string")。sprintf与wsprintf的区别和用法同上。
*****
*****接着我只回答你printf和sprintf的区别与用法。首先看函数声明:
int printf (const char *format [,argument]...);
int sprintf(char *buffer, const char *format [,argument] ... );
注意比较,sprintf多了一个参数buffer,其实它相当于printf的“显示器”,也就是说它把格式化后的字串保存到了buffer指向的字符数组,而不是输出到显示器。这就是printf和sprintf的本质区别。
*****
*****用法自然就明显了,你想直接显示到屏幕就用printf,想保存到字符数组就用sprintf。

wsprintf
  int wsprintf( LPTSTR lpOut, // 输出缓冲区,最大为1024字节
  LPCTSTR lpFmt, // 格式字符串
  ... // 需输出的参数);
  The wsprintf function formats and stores a series of characters and values in a buffer.
  使用此函数可将数字转为字符串;而且可以用它来连接多个字符串和数字。
  例:
  int x=6;
  LPTSTR szBuffer=new TCHAR[1024];
  wsprintf(szBuffer,“%d“,x);
  MessageBox(NULL,szBuffer,““,MB_OK);
  其中第三个参数的类型等是由格式字符串的类型控制的。
  对比 sprintf
  sprintf 同样是个变参函数,定义如下:
  int sprintf( char *buffer, const char *format [, argument] ... );
  除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数:格式化字符串上。
  wsprintf & sprintf 两者的区别:
  wsprintf对应的字符串是宽字符型wchar_t,即一个字符占用2个字节的内存空间.
  sprintf对应的字符串是字符类型为char,即一个字符占用1个字节的内存空间.
  sprintf是用于对ASCII码的127个字符进行操作,wsprintf是对UNICODE的多语言字符进行操作.比如中文,就要用wsprintf.
  对比 printf
  printf 和sprintf printf()函数是格式输出函数,printf()的基本形式: printf("格式控制字符串",变量列表);
  eg: printf("The %d CEOs drank %f cups of expresso.\n",number,expresso);
  sprintf & printf 两者的区别:
  在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。
  wsprintf & sprintf & printf 的相同点
  都使用格式化字符串来指定串的格式,在格式串内部使用一些以“%”开头的格式说明符(format specifications)来占据一个位置,在后边的变参列表中提供相应的变量,最终函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要的字符串。


wsprintf函数-一个用来存放在缓冲区的函数
WSPRINTF用法

在C语言中格式化字符串可以使用printf,但是在WINDOWS编程设计中却行不通了,但是却有变通的方法,那就是用 wsprintf这个函数 它的格式如下:

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");


原创粉丝点击