现在的位置: 首页 > 综合 > 正文

wsprintf和swprintf区别(转)

2013年02月21日 ⁄ 综合 ⁄ 共 1299字 ⁄ 字号 评论关闭

sprintf、swprintf

分别是对单字节/双字节字符格式化的,wsprintf根据预定义指示符的不同可以对单字节/双字节字符格式化。
wsprintf和swprintf比较,其实这两个函数对用用户来说是一样的,只不过前者是在 Winbase.h声明;后者是在stdio.h,
stdlib.h文件中声明。 对于wsprintf, 在编译器编译过程中会检查你所定义的宏,然后将TCHAR.H文件中的以_tcs打头的函数转换成对应的str或wcs大头的函数。如果你要build一个使用UNICODE字符集的程序,则可以定义 _UNICODE宏。如果要build一个single-byte的程序则不需要定义任何宏,单字节字符程序时默认的(对于WIN32是这样,对于WINCE默认则是unicode字符程序)。

////////////////////////////////////////////////
和sprintf一样用,
#include <stdio.h>
 
int main()
{
    wchar_t a[123];
    swprintf(a, L"%f", 123.456);
    wprintf(a);
}

注意第二个参数要加L,指定为宽字符字符串

wsprintf是windows api,不支持浮点输出,swprintf是c库函数,用法和sprintf一样(格式都一样),只不过针对的是宽字符。

 

wcscat
  原型:_INTRIMP wchar_t *wcscat(
  wchar_t *strDestination, //'\0'结尾的目标字符串
  const wchar_t *strSource //'\0'结尾的源字符串
  );
  用法:#include <stdlib.h>
  功能:把strSource所指字符串添加到strDestination结尾处,覆盖strDestination结尾处的'\0'并添加'\0'。
  说明:strSource和strDestination所指内存区域不可以重叠且strDestination必须有足够的空间来容纳strSource的字符串。
  返回值 : 返回指向strDestination的指针. No return value is reserved to indicate an error.
  备注 : 因为wcscat在strDestination追加strSource前不进行检查,这是一个缓冲区溢出的潜在原因。故使用时应注意。推荐使用wcscat_s替代.

 

strcpy

_tcscpy
在编译时会根据条件被替换,
如果是 非UNICODE 工程,它就被替换为 strcpy
UNICODE 工程被替换为 wcscpy
目的是使程序兼容性好.

strcpy   
原型:extern char *strcpy(char *dest,char *src);
       
  用法:#include <string.h>
 
  功能:把src所指由NULL结束的字符串复制到dest所指的数组中。
 
  说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
        返回指向dest的指针。

抱歉!评论已关闭.