在内存中,字符串由字符数组组成,并且在字符后添加'\0'字符作为结束标志
char c = "a";
char str[] = "Hello World";
printf("%s\n",str);
输出字符串只需要指定一个指针,c语言会默认从这个指针位置开始输出对应的字符,知道遇到'\0'字符为止。
转义字符
\a | 响铃(BEL) |
---|---|
\b | 退格(BS),将当前位置移到前一列 |
\f | 换页(FF),将当前位置移到下页开头 |
\n | 换行(LF),将当前位置移到本行开头 |
\r | 回车(CR),将当前位置移到本行开头 |
\t | 水平制表(HT),跳到下一个TAB位置 |
\v | 垂直制表(VT) |
\\ | 表示反斜杠本身(\) |
\' | 表示单引号(') |
\" | 表示双引号(") |
\? | 表示问号(?) |
\0 | 表示空字符串(NULL) |
\ddd | 1到3为八进制数所代表的任意字符 |
\xhh | 1到2为十六进制所代表的任意字符 |
格式化
printf 函数
#include <stdio.h>
...
int printf ( const char * format, ... );
参数解析
1、format参数
是一个格式化字符串,由格式化占位符和普通字符组成。
格式化占位符(以%开头)用于指明输出的参数值如何格式化。
格式化占位符的语法如下:
%[flags][width][.precision][length]specifier
例如:
%-11.9f
每一个格式化占位符均以%开始,以转换字符结束
specifier(转换字符,必选)
转换字符 | 参数类型;转换结果 |
---|---|
c | char;字符 |
d | int;有符号十进制整数 |
i | 同上 |
e | double;以指数形式输出单、双精度浮点数(小写 e) |
E | 同上(大写 E) |
f | double;以小数形式输出单、双精度浮点数 |
g | double;以 %f 或 %e 中较短的输出宽度输出单、双精度浮点数(指数显示小写 e) |
G | 同上(指数显示大写 E) |
o | unsigned int;无符号八进制(无前导 0) |
s | char *;字符串 |
u | int;无符号十进制 |
x | unsigned int;无符号十六进制(无前导 0x) |
X | 同上(无前导 0X) |
p | void *;指针值 |
n | int *;存放已写字符的个数 |
% | 不进行参数转换;% 自身 |
注:如果 % 后边的字符不是转换字符,则其行为没有定义。
flag(标志,可选)的内容即含义如下:
标志 | 含义 |
---|---|
- | 指定被转换的参数在其字段内左对齐(默认是右对齐) |
+ | 指定在输出的数前面加上正负号 |
空格 | 如果第一个字符不是正负号,则在其前面加上一个空格 |
0 | 对于数值转换,当输出长度小于字段宽度时,添加前导 0 进行填充 |
# | 指定另一种输出形式: 1. 如果转换字符为 o,则第一个数字为 0 2. 如果转换字符为 x 或 X,则指定在输出的非 0 值前加 0x 或 0X 3. 对于转换字符为 e、E、f、g 或 G 的情况,指定输出总是包含一个小数点。另外,对于转换字符为 g 或 G,还指定输出值尾部无意义的 0 将被保留 |
注:flags 可同时出现多个,且无顺序要求。
width(宽度,可选)是一个数值,用于指定最小字段的宽度
转换后的参数输出宽度至少要达到这个数值,如果参数的字符数少于该数值,则在参数左边(如果flag设置为-,要求左对齐的话则在右边)填充一些字符。填充字符通常为空格,但是如果flags设置为0,则填充字数为数字0.
.precision(.精度,可选),通过点号(.)分割字段的宽度和精度
- 对于字符串,它指定打印的字符的最大个数。
- 对于整数,它指定打印的数字位数(必要时可以添加填充位0以达到宽度要求)
- 对于转换字符为e、E、f,它指定打印的小数点后的数字位数
- 对于转换字符为g、G,它指定打印的有效数字位数
length(长度修饰符,可选)的值可以是h、hh、l、ll、L
- hh 表示将相应的参数按 signed char 或 unsigned char 类型输出
- h 表示将相应的参数按 short 或 unsigned short 类型输出
- l 表示将相应的参数按 long 或 unsigned long 类型输出
- ll 表示将相应的参数按 long long 或 unsigned long long 类型输出
- L 表示将相应的参数按 long double 类型输出
2、... 附加参数
该参数的个数由格式化字符串决定。
每个参数的值应当与前面格式化字符串中的占位符类型和位置一一对应。
返回值:
如果函数调用成功,返回值是实际打印的字符数(不包含表示字符串结束的 '\0');
如果函数调用失败,返回值是一个负数。
字符和字符串
char a = "a";
char b[] = "abcde";