C++中printf()函数的用法2

《C++中printf()函数的用法1》中提到printf()函数的格式中的format,可以是普通的字符串、转义序列或者是格式标准,并且介绍了当format是普通的字符串、转义序列时的用法。

int printf( const char *format [, argument]... ); 

本文继续介绍当format是格式标准时的用法。

1 格式标准的组成

printf()函数的转换标准由一些必要的域和一些可选的域组成,其格式如下所示:

%[flags][width][.precision][size]type

其中,加方括号的域为可选域,不加方括号的域时必要域。从以上格式可知,printf()函数的格式标准必须要包括%和type,type指定了要转换的argument的类型。type可以指定argument的类型包括字符、整型、浮点型、指针类型和字符串类型。

2 指定argument的类型是字符型

当type的值是c或者C时,表示指定argument的类型是字符型。其中c表示以是窄字符的格式输出argument,而C表示以宽字符的格式输出argument。

以上代码以窄字符的方式输出ch,即此时输出的结果是“a”。

char ch = 'a';

int ret = printf("%c", ch);

以上代码以宽字符的方式输出wch,即此时输出的结果是“你”。

#include<locale>

setlocale(LC_ALL, "chs");

wchar_t wch = L'你';

int ret = printf("%C", wch);

3 type与argument不符

在“2 指定argument的类型是字符型”中提到,c表示以是窄字符的格式输出argument,而C表示以宽字符的格式输出argument。当type与argument的类型不符时,其输出结果将不同。

3.1 type是c,argument是宽字符

有如下代码

wchar_t wch = L'你';

int ret = printf("%c", wch);

此时,printf()函数按照窄字符的格式输出宽字符,因为窄字符是一个字节,而宽字符是两个字节,“你”的值是0x4f60。所以printf()函数会输出wch的第一个字节,即0x60。

3.2 type是C,argument是窄字符

有如下代码

char ch = 'a';

int ret = printf("%C", ch);

此时,printf()函数按照宽字符的格式输出窄字符,ch的值是0x61,其后面一个字节是0xcc,此时printf()函数的输出是0xcc61,即是宽字符的’a’。

发布了314 篇原创文章 · 获赞 206 · 访问量 61万+

猜你喜欢

转载自blog.csdn.net/hou09tian/article/details/105484657