C语言转义字符:一文打尽

在这里插入图片描述

1. 前言

大家好,我是努力学习游泳的鱼。在字符中,有一类特殊的群体,你经常见到,但它们和你见到的样子可能不一样。它们就是转义字符。阅读这篇文章,你将对它们有更好的了解。

2. 预备知识

2.1 打印格式

我们可以用printf配合%d来打印整型,除此之外还有其他格式。

%d - 打印整型
%s - 打印字符串
%c - 打印字符

#include <stdio.h>

int main()
{
	printf("%d\n", 100);
	printf("%s\n", "abcdef");
	printf("%c\n", 'a');
	
    return 0;
}

2.2 进制转换

为什么十进制的130表示的是130呢?因为130每个数字都有它的权重。其中从右往左,0的权重是100,即13的权重是101,即101的权重是102,即100,计算0×1+3×10+1×100得到130
那么八进制的130转换成十进制是多少呢?同理,从右往左,0的权重是80,即13的权重是81,即81的权重是82,即64,计算0×1+3×8+1×64=0+24+64=88,即八进制的130转换成十进制是88
十六进制数字的转换同理。

2.3 ASCII码

键盘上能敲出来的每个字符都对应一个ASCII码值,比如a97A65等等。

3. 什么是转义字符

转义,即转变了原来的意思。
如果我这么写printf("abcndef");那么屏幕上就会打印出abcndef
如果我在n前面加个\,即printf("abc\ndef");那么屏幕上就会打印abc,然后换行,接下来打印def,此时这个\n的作用就是换行。
n本来的意思就是个字符'n',但加了个\变成\n之后就转变了原来的意思,变成了换行,所以\n是一个转义字符。

4. 常见的转义字符

4.1 \?

在书写连续多个问号时使用,防止他们被解析成三字母词

早期的C语言编译器,存在三字母词。比如说,??)表示]??(表示[
所以如果我写printf("(Are you ok??)");实际打印出来的效果就是(Are you ok]
所以正确的写法是printf("(Are you ok\?\?)");此时的\?就不是一个三字母词里的问号了,而是一个普普通通的问号。

4.2 \'

用于表示字符常量'

如果我们想要打印一个单引号,我们不能写printf("%c", ''');因为前两个单引号会组成一对单引号,第三个单引号就落单了。正确的写法是printf("%c", '\'');此时的\'就不是一对单引号里的单引号了,而是一个普普通通的单引号。

4.3 \"

用于表示一个字符串内部的双引号

明白\'的作用后,\"就很简单了。我们不能写printf("%s", """);而应该写printf("%s", "\"");因为前者的前两个双引号构成一对,第三个双引号就落单了,所以要对双引号进行转义,使其成为一个普普通通的双引号。

4.4 \\

用于表示一个反斜杠,防止它被解释为一个转义序列符。

如果我们想要打印一串路径,我们不能这么写printf("C:\test\test.c");因为\t会被识别为转义字符。正确的写法是printf("C:\\test\\test.c");此时\\的作用是让\不再是转义字符\t里的\,而是一个普普通通的\

写路径时,建议在每个反斜杠前都加个反斜杠。

4.5 \dddddd表示1到3个八进制数字

比如\130代表的是把130这个八进制数字转换成十进制后得到的88作为ASCII码值代表的字符,即'X'

4.6 \xdddd表示1到2个十六进制数字

比如\x31代表的是把31这个十六进制数字转换成十进制后得到的49作为ASCII码值代表的字符,即'1'

4.7 其他转义字符

\a警告字符,蜂鸣
\b退格符
\f进纸符
\0字符串结束标志
\n换行
\r回车
\t水平制表符
\v垂直制表符

5. 一道笔试题

下面的程序输出的结果是什么呢?

#include <stdio.h>
#include <string.h>

int main()
{
	 printf("%d\n", strlen("c:\test\628\test.c"));
	 
	return 0;
}

关键是认出\t是一个转义字符,还有……
\628?
nonono!反斜杠后面跟1到3个八进制数字,八进制数字只有0到7,哪有8呀?所以\62是一个转义字符,不带后面的8玩!
输出的结果是14。

6. 一个小插曲

我在测试\a时,写了一段代码

#include <stdio.h>

int main()
{
	while (1)
	{
		printf("\a");
	}
	
	return 0;
}

结果电脑直接卡住了,结束进程都没用哈哈哈,不得不重启了。
所以:

大家没事不要写这种危险的代码……

不信的话你可以试试。

相关推荐

  1. Hive调优

    2024-03-10 02:50:06       51 阅读
  2. C语言——转义字符

    2024-03-10 02:50:06       58 阅读
  3. 初识C语言字符串转义字符、注释

    2024-03-10 02:50:06       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-10 02:50:06       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-10 02:50:06       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-10 02:50:06       87 阅读
  4. Python语言-面向对象

    2024-03-10 02:50:06       96 阅读

热门阅读

  1. 精读《深度学习 - 函数式之美》

    2024-03-10 02:50:06       52 阅读
  2. ubuntu22.04 zip的安装及其压缩文件

    2024-03-10 02:50:06       40 阅读
  3. 深入了解C#中的PropertyInfo类

    2024-03-10 02:50:06       44 阅读
  4. 记一次kafka消息积压的排查

    2024-03-10 02:50:06       48 阅读
  5. P2386 放苹果

    2024-03-10 02:50:06       43 阅读
  6. python安装graph-tool 和 torch_geometric,pytorch总结:

    2024-03-10 02:50:06       52 阅读
  7. 单片机对比:选择最适合你的单片机

    2024-03-10 02:50:06       62 阅读