网络

教育改变生活

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 524|回复: 0
打印 上一主题 下一主题

【C语言】转义字符

[复制链接]

686

主题

693

帖子

3101

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3101
跳转到指定楼层
楼主
发表于 2024-1-5 20:50:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
字符集(Character Set)为每个字符分配了唯一的编号,我们不妨将它称为编码值。在C语言中,一个字符除了可以用它的实体(也就是真正的字符)表示,还可以用编码值表示。这种使用编码值来间接地表示字符的方式称为转义字符(Escape Character)

转义字符以\或者\x开头,以\开头表示后跟八进制形式的编码值,以\x开头表示后跟十六进制形式的编码值。对于转义字符来说,只能使用八进制或者十六进制。

字符 1、2、3、a、b、c 对应的 ASCII 码的八进制形式分别是 61、62、63、141、142、143,十六进制形式分别是 31、32、33、61、62、63。下面的例子演示了转义字符的用法:
  • char a = '\61';  //字符1
  • char b = '\141';  //字符a
  • char c = '\x31';  //字符1
  • char d = '\x61';  //字符a
  • char *str1 = "\x31\x32\x33\x61\x62\x63";  //字符串"123abc"
  • char *str2 = "\61\62\63\141\142\143";  //字符串"123abc"
  • char *str3 = "The string is: \61\62\63\x61\x62\x63"  //混用八进制和十六进制形式


转义字符既可以用于单个字符,也可以用于字符串,并且一个字符串中可以同时使用八进制形式和十六进制形式。

一个完整的例子:
  • #include <stdio.h>
  • int main(){
  •     puts("\x68\164\164\x70://c.biancheng.\x6e\145\x74");
  •     return 0;
  • }


运行结果:
http://c.biancheng.net

转义字符的初衷是用于 ASCII 编码,所以它的取值范围有限:
  • 八进制形式的转义字符最多后跟三个数字,也即\ddd,最大取值是\177;
  • 十六进制形式的转义字符最多后跟两个数字,也即\xdd,最大取值是\x7f。

超出范围的转义字符的行为是未定义的,有的编译器会将编码值直接输出,有的编译器会报错。

对于 ASCII 编码,0~31(十进制)范围内的字符为控制字符,它们都是看不见的,不能在显示器上显示,甚至无法从键盘输入,只能用转义字符的形式来表示。不过,直接使用 ASCII 码记忆不方便,也不容易理解,所以,针对常用的控制字符,C语言又定义了简写方式,完整的列表如下:
转义字符意义ASCII码值(十进制)
\a响铃(BEL)007
\b退格(BS) ,将当前位置移到前一列008
\f换页(FF),将当前位置移到下页开头012
\n换行(LF) ,将当前位置移到下一行开头010
\r回车(CR) ,将当前位置移到本行开头013
\t水平制表(HT) 009
\v垂直制表(VT)011
\'单引号039
\"双引号034
\\反斜杠092

\n\t是最常用的两个转义字符:
  • \n用来换行,让文本从下一行的开头输出,前面的章节中已经多次使用;
  • \t用来占位,一般相当于四个空格,或者 tab 键的功能。

单引号、双引号、反斜杠是特殊的字符,不能直接表示:
  • 单引号是字符类型的开头和结尾,要使用\'表示,也即'\'';
  • 双引号是字符串的开头和结尾,要使用\"表示,也即"abc\"123";
  • 反斜杠是转义字符的开头,要使用\\表示,也即'\\',或者"abc\\123"。

转义字符示例:
  • #include <stdio.h>
  • int main(){
  •     puts("C\tC++\tJava\n\"C\" first appeared!");
  •     return 0;
  • }


运行结果:
C    C++    Java
"C" first appeared!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

WEB前端

QQ|手机版|小黑屋|金桨网|助学堂  咨询请联系站长。

GMT+8, 2024-12-23 02:41 , Processed in 0.034507 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表