栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

常见的转义字符

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

常见的转义字符

目录

前言

转义字符例子

常见转义字符

?

'

"

\与t

n

ddd

xdd

转义字符笔试题


前言

在字符串中,我们以作为字符串的结束标志;在printf函数中,我们通过n实现换行,那么这里的、n究竟是什么东西呢?没错,就是我们C语言中常说的转义字符。

C中定义了一些字母前加""来表示常见的那些不能显示的字符,如,t,n等,就称为转义字符,因为前面加上的字符,都不是它本来的字符意思了。

转义字符例子

比如说以下两段代码:

int main() {
	printf("hello world!n");
	return 0;
}
int main() {
	printf("hello world!n");
	return 0;
}

我们发现第一个代码输出的结果为hello world!n,而第二个代码输出的结果为hello world!,并且下面有一横行的空行。这就是的作用,原来的n原本就是字符n的意思,在n前面加上就改变了其原来的意思,也就是换行的意思。

因此,转义字符顾名思义就是转变意思,把原来的意思改变了。

常见转义字符
转义字符释义
?在书写连续多个问号时使用,防止他们被解析成三字母词
'用于表示字符常量'
"用于表示一个字符串内部的双引号
\用于表示一个反斜杠,防止它被解释为一个转义序列符。
a警告字符,蜂鸣
b退格符
f进纸符
n换行
r回车
t水平制表符
v垂直制表符
dddddd表示1~3个八进制的数字。 如: 130 X
xdddd表示2个十六进制数字。 如: x30 0

?

三字母词是一个比较老的概念了,这种现象只有在老的编译器里才会出现,现在的编译器基本看不到这种效果了,在VS2019环境下不会出现三字母词的现象。

在Dev C++6.0中,如果我们写下以下代码

int main() {
	printf("(are you ok??)n");
	return 0;
}

我们会发现,输出的结果为(are you ok]。这是因为?+?+)会构成三字母词,计算机会解析成]。

为了防止解析为三字母词,我们需要在?前面加上。

int main() {
	printf("(are you ok??)n");
	return 0;
}

这样我们才得到我们想要的输出结果,即(are you ok??)。不过,三字母词现在基本上已不存在,这种转义字符用的场景也越来越少。

'

如果我们想在电脑上单纯的输出字符',下面代码可以实现吗?

#include
int main(){
printf("%cn",''');  //error
return 0;
}

这时我们编译运行时会发现编译器报错,这是因为C语言中'首先与接下来第一个出现的单引号'进行匹配,从而构成了空字符,后面的单引号'因没有匹配所以会进行报错。那么我们怎么样才能按我们的预期打印出'呢?我们就需要在字符'前加上,让这个单引号'失去配对的资格,只是字符'。

int main() {
	printf("%cn", ''');
	return 0;
}

这时我们发现计算机终于正确的打印出我们想要的'了。

"

用法基本与'类似,在此不再一一赘述。

int main() {
	printf("我说:"我要上清华!"n");
	return 0;
}

我们会发现,上面代码会报错,为了让"仅仅是字符串内部的双引号,我们就需要在"前面加上。

int main() {
	printf("我说:"我要上清华!"n");
	return 0;
}

\与t

假如我们要在屏幕上打印一个目录:c:codetest.c   那么该如何写代码呢?

int main()
{
	printf("c:codetest.cn");
	return 0;
}

这时我们会发现屏幕上的输出结果为c:code        est.c。这是因为与后面的英文字母构成了转义字符,t是水平制表符,就是键盘最左边一列上的table键。为了防止被解释为一个转义序列符,我们就需要在前面再加上一个,让它称为普普通通的。

n

换行的意思,printf函数中常见,不再赘述。

ddd

ddd表示1~3个八进制的数字。比如32是2个八进制数字,32作为八进制代表的那个十进制数字,作为ASCII码值,对应ASCII码表上对应的字符,我们将八进制数字32进行转换得到十进制数字为26。(2*8^0+3*8^1=26)

int main() {
	printf("%cn", '32');//ddd的八进制数字转换成10进制后的值,作为ASCII值代表的字符
                          //8进制的032转换成10进制是26
	return 0;
}

我们会发现,输出的结果正是ASCII码表上26号对应的->。

xdd

dd表示2个十六进制数字。用法与ddd类似,在此不再赘述。

转义字符笔试题
int main()
{
	printf("%dn", strlen("abcdef"));
	// 32被解析成一个转义字符
	printf("%dn", strlen("c:test328test.c"));
	return 0;
}

请问上面代码的输出结果是什么?

答案分别是6,14。

第一个很简单,不在讲解。

第二个字符分别是'c'  ':'  't'  'e'  's'  't'  '32'  '8'  't'  'e'  's'  't'  '.'  'c'总共14个字符。其中328不要误认为是一个字符,这是因为八进制数字只有0-7,因此8单独作一个字符。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/921192.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号