不可打印字符控制符
这类字符用于控制设备(如终端、打印机)的行为,如换行、回车、制表符等。

(图片来源网络,侵删)
| 转义字符 | 名称 | 作用/ASCII码 |
|---|---|---|
\a |
响铃 | 产生一个系统响铃声(警报)。 |
\b |
退格 | 将光标当前位置向前移动一个位置。 (ASCII 8) |
\f |
换页 | 将光标移到下一页的开头。 |
\n |
换行 | 将光标移到下一行的开头。 (ASCII 10) |
\r |
回车 | 将光标移到当前行的开头。 (ASCII 13) |
\t |
水平制表符 | 将光标移动到下一个水平制表位(通常是8的倍数列)。 (ASCII 9) |
\v |
垂直制表符 | 将光标移到下一行的垂直制表位。 |
示例代码:
#include <stdio.h>
int main() {
printf("Hello\tWorld\n"); // 输出: Hello World (Hello和World之间有一个制表符距离)
printf("Line 1\rLine 2"); // 输出: Line 2 (光标回到行首,覆盖了"Line 1")
return 0;
}
特定字符的转义
这些字符在字符串中有特殊含义(如字符串的起始和结束),因此需要用转义字符来表示其本身。
| 转义字符 | 名称 | 作用 |
|---|---|---|
\\ |
反斜杠 | 表示一个反斜杠字符 \。 |
\' |
单引号 | 表示一个单引号字符 。 |
\" |
双引号 | 表示一个双引号字符 。 |
\? |
问号 | 在一些旧的C编译器中,用于避免三字母词(如 会被解释为 ]),现在很少使用,但标准中仍然保留。 |
示例代码:
#include <stdio.h>
int main() {
printf("This is a backslash: \\ \n"); // 输出: This is a backslash: \
printf("He said, \"C is fun.\"\n"); // 输出: He said, "C is fun."
printf('A'); // 正确,字符常量用单引号
// printf("A"); // 正确,字符串常量用双引号
// printf(' " '); // 错误!编译器会认为字符串在 " 处结束了
printf("\""); // 正确,表示双引号字符
return 0;
}
数值转义字符
这类转义字符允许你通过其ASCII码来表示一个字符。

(图片来源网络,侵删)
a) 八进制转义
格式为:\ 后跟1到3位八进制数字(0-7)。
规则:
- 最多3位。
- 如果八进制数值超出
0-255的范围(即超过3位八进制),其行为是未定义的。 \0是一个非常重要的特例,它代表ASCII码为0的“空字符”(Null Character),用于C语言中字符串的结束。
示例代码:
#include <stdio.h>
int main() {
// 字符'A'的ASCII码是65,八进制是101
printf("%c\n", '\101'); // 输出: A
// 字符'B'的ASCII码是66,八进制是102
printf("%c\n", '\102'); // 输出: B
// 空字符,字符串的结束标志
char str[] = "Hello\0World"; // 实际上只会打印 "Hello"
printf("%s\n", str); // 输出: Hello
return 0;
}
b) 十六进制转义
格式为:\x 后跟1位或多位十六进制数字(0-9, a-f, A-F)。

(图片来源网络,侵删)
规则:
\x后面的数字数量不限,只要能构成一个有效的十六进制数即可。- 如果十六进制数值超出
0-255的范围,其行为是未定义的。
示例代码:
#include <stdio.h>
int main() {
// 字符'A'的ASCII码是65,十六进制是41
printf("%c\n", '\x41'); // 输出: A
// 字符'B'的ASCII码是66,十六进制是42
printf("%c\n", '\x42'); // 输出: B
// 换行符的ASCII码是10,十六进制是A
printf("Line 1\xALine 2\n"); // 输出: Line 1
// Line 2
return 0;
}
总结表格
| 转义字符 | 十六进制值 | 十进制值 | 描述 |
|---|---|---|---|
\a |
0x07 |
7 |
响铃 (BEL) |
\b |
0x08 |
8 |
退格 (BS) |
\t |
0x09 |
9 |
水平制表 (HT) |
\n |
0x0A |
10 |
换行 (LF) |
\v |
0x0B |
11 |
垂直制表 (VT) |
\f |
0x0C |
12 |
换页 (FF) |
\r |
0x0D |
13 |
回车 (CR) |
\\ |
0x5C |
92 |
反斜杠 |
\' |
0x27 |
39 |
单引号 |
\" |
0x22 |
34 |
双引号 |
\? |
0x3F |
63 |
问号 |
\0 |
0x00 |
0 |
空字符 (NUL) |
\ooo |
- | 1-255 |
八进制表示 |
\xhh |
- | 1-255 |
十六进制表示 |
重要提示
- 未定义行为:当使用八进制或十六进制转义字符时,如果计算出的值超过了
0-255的范围,结果将是未定义的,这意味着程序的行为是不可预测的,可能会导致程序崩溃或产生错误输出。 - 可读性:虽然可以用
\x41来表示'A',但在代码中直接使用'A'的可读性要高得多,转义字符主要用于表示那些无法直接输入或具有特殊控制功能的字符。
