C语言的转义字符
原文地址:http://blog.163.com/sunshine_linting/blog/static/44893323201181325818165/
在字符集中,有一类字符具有这样的特性:当从键盘上输入这个字符时,显示器上就可以显示这个字符,即输入什么就显示什么。这类字符称为可显示字符,如a、b、c、$、+和空格符等都是可显示字符。
另一类字符却没有这种特性。它们或者在键盘上找不到对应的一个键(当然可以用特殊方式输入),或者当按键以后不能显示键面上的字符。其实,这类字符是为控制作用而设计的,故称为控制字符。
在C语言中,构成字符常量的控制字符必须用转义字符表示。转义字符是一种以“\”开头的字符。例如退格符用'\b'表示,换行符用'\n'表示。转义字符中的'\'表示它后面的字符已失去它原来的含义,转变成另外的特定含义。反斜杠与其后面的字符一起构成一个特定的字符。
转义字符是C语言中表示字符的一种特殊形式。转义字符以反斜'\'开头,后面跟一个字符或一个八进制或十六进制数表示。转义字符具有特定的含义,不同于字符原有的意义,故称转义字符。
通常使用转义字符表示ASCII码字符集中不可打印的控制字符和特定功能的字符,如用于表示字符常量的单撇号('),用于表示字符串常量的双撇号(")和反斜杠(\)等。
例如,下面例子printf函数的格式串中用到的'\n'就是一个转义字符,其意义是“回车换行”。转义字符主要用来表示那些用一般字符不便于表示的控制代码。
常用的转义字符及其含义

\ddd 三位八进制
\xhh 二位十六进制
ASCAII码范围表
数字 0---9 表示: 48--57
大写字母表示: 65---90
小写字母表示: 97---122
NUL 空字符 CR回车 LF换行
从表中可以看出,在C语言中有三种转义字符,它们是:一般转义字符、八进制转义字符和十六进制转义字符。
\b、\f、\n、\r、\t,以及 \v 都是输出设备控制符。退格符(\b)使当前行的活跃位置后退一个位置。换页符(\f)使活跃位置跳到下一页的开端。注:换页符可用于控制打印机换页,但不会导致 PC 机的显示屏换页。换行符(\n)使活跃位置跳到下一行的开端。回车符 ( \r )使活跃位置返回当前行的开端。水平制表符(\t)使活跃位置移动若干个位置(通常是8个)。垂直制表符(\v)使活跃位置换若干行。注:\v可用于控制打印机换若干行,但是不会导致PC机的显示屏换行。
如果要打印以下句子: "\ is called 'backslash'."
我们需要使用如下语句:
printf("\"\\ is called \'backslash\'.\""); 或者
printf("\"\\ is called 'backslash'.\"");
注意,在字符串字面量中,无论写 \' 还是 ',输出都是一样的。但是,在给字符变量赋值时,一定要写 \'。例如:
char ch = ''';
char ch = '\'';
\0oo 和 \xhh 是ASCII码的两种特殊表示形式。如果想用八进制ASCII码表示字符,可以在八进制数前面加上 \ ,然后用单引号引起来。例如:
beep = '\007';
打头的那些0可以省略,也就是说,写成 '\07' 或者 '\7' 都一样。无论有没有打头的0 ,7 都会被当成八进制数处理。
从 C89 开始,C提供了用十六进制表示字符常量的方法:在反斜杆后面写一个 x ,然后再写 1 到 3 个十六进制数字。例如:
nl = '\xa';
注意:使用ASCII码时,要注意区分数字和数字字符。例如:字符4的ASCII码是52 ,'4' 代表字符 4 ,而不是数字4。此外,尽管 '\n'和 '\xa' ,'\a' 和 '\007' 是等价的,但是我们应该尽可能使用 '\n' 和 '\a',而不要用 '\xa' 和 '\007' 。这是因为前者易懂、便于记忆,而且移植性更高。
1. 一般转义字符
这种转义字符,虽然在形式上由两个字符组成,但只代表一个字符。常用的一般转义字符为:
\a \n \t \v \b \r \f \\ \’ \"
细心的读者可能已经发现,转义字符'\\'代表的反斜杠"\"、转义字符’\’’代表的字符"'"和转义字符'\"'代表的字符""",其本身就是可显示字符,为什么还要对它转义呢?
这是因为它们的原有的字符形式已作它用,其中,单引号用作区分字符常量的括号,双引号用作区分字符串(下面将要介绍字符串)的括号,而反斜杠本身已用来表示转义字符的开头,因此必须对它们用转义字符重新声明。
2. 八进制转义字符
它是由反斜杠'\'和随后的1~3个八进制数字构成的字符序列。例如,'\60'、'\101'、'\141'分别表示字符'0'、'A'和'a'。因为字符'0'、'A'和'a'的ASCII码的八进制值分别为60、101和141。
字符集中的所有字符都可以用八进制转义字符表示。
如果你愿意,可以在八进制数字前面加上一个0来表示八进制转移字符。
3. 十六进制转义字符
它是由反斜杠'\'和字母x(或X)及随后的1~2个十六进制数字构成的字符序列。例如,'\x30'、'\x41'、'\X61'分别表示字符'0'、'A'和'a'。因为字符'0'、'A'和'a'的ASCII码的十六进制值分别为0x30、0x41和0x61。
可见,字符集中的所有字符都可以用十六进制转义字符表示。
由上可知,使用八进制转义字符和十六进制转义字符,不仅可以表示控制字符,而且也可以表示可显示字符。但由于不同的计算机系统上采用的字符集可能不同,因此,为了能使所编写的程序可以方便地移植到其他的计算机系统上运行,程序中应少用这种形式的转义字符。
转义字符的使用
例:
1 void main()
2 {
3 int a,b,c;
4 a=5; b=6; c=7;
5 printf("%d\n\t%d %d\n %d %d\t\b%d\n",a,b,c,a,b,c);
6 }
此程序练习转义字符的使用:
a、b、c分别为整数5,6,7
调用printf显示程序运行结果:
5
67
56 7
程 序在第一列输出a值5之后就是“\n”,故回车换行;接着又是“\t”,于是跳到下一制表位置(设制表位置间隔为8),再输出b值6和c 值7;后又是"\n",因此再回车换行;之后又输出a值5和b值6;再次后"\t"跳到下一制表位置(与上一行的6 对齐),但下一转义字符“\b”又使退回一格,故紧挨着6再输出c值7。
使用转义字符时需要注意以下问题:
1)转义字符中只能使用小写字母,每个转义字符只能看作一个字符。
2)\v垂直制表和\f换页符对屏幕没有任何影响,但会影响打印机执行响应操作。
3)在C程序中,使用不可打印字符时,通常用转义字符表示。
4)转义字符’\0’表示空字符NULL,它的值是0。而字符'0'的ASCII码值是48。因此,空字符’\0’不是字符0。另外,空字符不等于空格字符,空格字符的ASCII码值为32而不是0。编程序时,读者应当区别清楚。
5) 如果反斜线之后的字符和它不构成转义字符,则’\’不起转义作用将被忽略。
例如:
printf(“a\Nbc\nDEF\n”);
输出:
aNbc
DEF
6)转义字符也可以出现在字符串中,但只作为一个字符看待。
例 求下面字符串的长度
“\026[12,m” 长度为6
“\0mn” 长度为0。
C语言的转义字符的更多相关文章
- C语言初学 转义字符举例
#include<stdio.h> main() { printf("\101 \x42 C\n"); printf("I say:\"How ar ...
- C语言:转义字符 ++a例子
#include <stdio.h> int main() { printf("a\bwhat\'s\tyour\tname\n"); int k; printf(&q ...
- 《C语言深度剖析》学习笔记----C语言中的符号
本节主要讲C语言中的各种符号,包括注释符.单引号双信号以及逻辑运算符等. 一.注释符 注释符号和注释在程序的预编译期就已经被解决了,在预编译期间,编译器会将注释符号和注释符号之间的部分简单的替换成为空 ...
- 《C语言及程序设计初步》网络课程主页
题记 CSDN要开在线教育频道,向我发出邀请,看能否开些课程. 我近日一直在关注着翻转课堂,试图在传统课堂中引入新的元素,这须要资源建设的积累.没有时间表的工作,非常难把握. 为CSDN做在线课程,为 ...
- Python学习笔记-转义字符
Python转义字符同C语言的转义字符
- C语言及程序设计[套餐]课程主页
课程链接:http://edu.csdn.net/combo/detail/30,提供全部的视频和课件下载. 三部分的课程主页.提供了为每一课时配套的自測.演示样例下载,以及程序阅读.程序填空.实践项 ...
- 转义字符的理解(JAVA、字符串和正则表达式)
一.原理总结: 要理解转义,首先要从正则表达式说起. 在正则表达式中:*和\是特殊字符:为了匹配这两个字符本身,正则表达式中需要写为\*和\\ 在Java中,只能用字符串表示正则表达式,所以需要把\* ...
- go语言入门(1)
1,Go语言的核心开发团队-三个大牛 Ken Thompson(肯·汤普森):1983年图灵奖(Turing Award)和1998年美国国家技术奖(National Medal of Technol ...
- 2.1Go语言特性
1.1.2. 编程语言类型 静态语言,动态语言 静态语言:强类型语言 定义变量,必须指明数据类型,存储对应类型的数据. 例如java,go,c 动态语言:弱类型语言 定义变量,赋值过程决定 ...
随机推荐
- 【第二组】Hunter——beta版发布文档
软件测试报告 一.bug情况汇总 尚需解决以及难以解决的: 登录时会有卡顿,需要加入加载进度条(会添加的) 商城和背包功能尚未实现(需要修复) 美工水平太差,让人没有使用的欲望(大概接下来就专门做这个 ...
- eclipse与idea快捷键对比以及idea debug、git快捷键
eclipse与idea快捷键 表格中的空格都是忘记了~ 功能 eclipse idea 生成返回值对象 alt+shift+L ctrl+alt+V 找到启动类 ctrl+alt+Home 类的 ...
- Redis安装教程及可视化工具RedisDesktopManager下载安装
Redis安装教程: 1. Windows下安装教程: 下载:https://github.com/MSOpenTech/redis/releases Redis 支持 32 位和 64 位.这个需要 ...
- pl/sql报错快速解决方法(新手推荐)
一:简介 今天登录数据库时莫名报了个奇怪的错:ORA-01033: ORACLE initialization or shutdown in progress可能是昨天匆忙电脑没正常关机导致的... ...
- 深入Dockerfile(一): 语法指南(转)
最近在学习K8S,发现这两篇文章还不错,转了过来 docker官方文档Dockerfile reference的笔记. 一.机制 1.1 构建 docker构建一个镜像,需要: Dockerfile文 ...
- C# 一些学习作业
下载地址:http://pan.baidu.com/s/1dEGCJdf 包括: 实现QQ旋转窗体功能 非“按角度旋转”,实现的是立体旋转. 实现QQ旋转窗体功能,窗口为不规则图像,打开时旋转180度 ...
- JS解决在提交form表单时某个值不存在 alter弹窗点确定不刷新界面
<form action="" method="post" onsubmit="return checkname()"> < ...
- 如何把ppt写好
前言 这里不是总结ppt如何写的美观漂亮,而是总结写整体的结构,如何修辞 整体结构 前后呼应 就像做作文一样,前后呼应,产生共鸣和联想,切记过于离散 抽象化 不要把自己做的东西写小了,要有一定的抽象度 ...
- vue的表单输入绑定
1.单行绑定 <p>{{logintype}}</p> <input type="text" v-model="logintype" ...
- route的简单使用
route [add|del] [-net|-host] target [netmask Nm] [gw Gw] [[dev] If] add : 添加一条路由规则del : 删除一条路由规则-net ...