printf unicode ansi 的集合帖

本文详细介绍了C/C++中常用的格式化输出函数,如printf、fprintf、sprintf及snprintf等的功能和使用方法。同时对比了它们之间的区别,如输出目的地、字符限制及浮点数支持等方面的不同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

printf()

sprintf(buffer, "ascii");

wsprintf(buffer, L"unicode");

#ifndef   _UNICODE   
#define   _stprintf       sprintf   
#else   
#define   _stprintf       wsprintf   
#endif

sprintf跟printf在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上

wsprintf   有   1024   字符限制,而且不支持浮点数(如.lf)。sprintf没有限制

fprintf()
  按格式输入到流,其原型是int fprintf(FILE *stream, const char *format[, argument, ...]);其用法和printf()相同,不过不是写到控制台,而是写到流罢了



snprintf函数并不是标准c/c++中规定的函数,但是在许多编译器中,厂商提供了其实现的版本。
在gcc中,该函数名称就snprintf,而在VC中称为_snprintf。


int _snprintf( char *buffer, 
size_t count, 
const char *format [, 
argument] 
... );
int rt = snprintf(str,3,"%s","abcdefg");



#include <stdio.h>

int printf(const char *format, ...);

int fprintf(FILE *stream, const char *format, ...);

int sprintf(char *str, const char *format, ...);

int snprintf(char *str, size_t size, const char *format, ...);

#include <stdarg.h>------------现在好像都在stdio.h中进行声明

int vprintf(const char *format, va_list ap);

int vfprintf(FILE *stream, const char *format, va_list ap);

int vsprintf(char *str, const char *format, va_list ap);

int vsnprintf(char *str, size_t size, const char *format, va_list ap);

描述 (DESCRIPTION)

print系列函数根据format 参数生成输出内容

printfvprintf函数把输出内容写到stdout即标准输出流

fprintfvfprintf函数把输出内容写到给定的stream

sprintfsnprintf vsprintfvsnprintf函数把输出内容存放到字符串str.

这些函数由格式字符串format参数控制输出内容它指出怎么样把后面的参数(或通过stdarg(3)的变长参数机制访问的 参数)转换成输出内容

这些函数返回打印的字符数量(不包括字符串结尾用的\0)snprintfvsnprintf的输出不会超过size 字节(包括了结尾的`\0') 如果因为这个限制导致输出内容被截断, 则函数返回-1 


ANSI 操作函数以str开头 strcpy  
    Unicode 操作函数以wcs开头 wcscpy  
    MBCS 操作函数以_mbs开头 _mbscpy  
    ANSI/Unicode 操作函数以_tcs开头 _tcscpy(C运行期库)  
    ANSI/Unicode 操作函数以lstr开头 lstrcpy(Windows函数)


  9. 如何编写符合ANSI和Unicode的应用程序?  
    (1) 将文本串视为字符数组,而不是chars数组或字节数组。  
    (2) 将通用数据类型(如TCHAR和PTSTR)用于文本字符和字符串。  
    (3) 将显式数据类型(如BYTE和PBYTE)用于字节、字节指针和数据缓存。  
    (4) 将TEXT宏用于原义字符和字符串。  
    (5) 执行全局性替换(例如用PTSTR替换PSTR)。  
    (6) 修改字符串运算问题。例如函数通常希望在字符中传递一个缓存的大小,而不是字节。这意味着不应该传递sizeof(szBuffer),而应该传递(sizeof(szBuffer)/sizeof(TCHAR)。另外,如果需要为字符串分配一个内存块,并且拥有该字符串中的字符数目,那么请记住要按字节来分配内存。这就是说,应该调用malloc(nCharacters     *sizeof(TCHAR)),而不是调用malloc(nCharacters)。


     10. 如何对字符串进行有选择的比较?  
    通过调用CompareString来实现。  
    标志 含义  
    NORM_IGNORECASE 忽略字母的大小写  
    NORM_IGNOREKANATYPE 不区分平假名与片假名字符  
    NORM_IGNORENONSPACE 忽略无间隔字符  
    NORM_IGNORESYMBOLS 忽略符号  
    NORM_IGNOREWIDTH 不区分单字节字符与作为双字节字符的同一个字符  
    SORT_STRINGSORT 将标点符号作为普通符号来处理 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值