首页 > 三字母词和转义字符

三字母词和转义字符

1. 三字母词

在C语言中有一种三字母词的说法,trigraph sequences,目前为止有九种三字母词,如下

??=               #                  ??)            ]                  ??!           |        

??(                [                   ??'            ^                  ??>          }

??/                                    ??<         
{                   ??-           ~

三字母词出现的原因是,为了避免以前的老式键盘中没有上面的九种字符

这里还需要注意的是,在用gcc编译时可能会出现如下错误

在编译时如果不加-trigraphs会出现如下警告

warning: trigraph ??/ ignored, use -trigraphs to enable

我们需要在编译时加上-trigraphs选项,而且需要加在最前面。

cc -trigraphs -o test test.c



这里我们需要注意的一点就是,当我们看到两个问号同时出现时,就留意一下三字母词,避免引起不必要的麻烦,防止出现三字母词,即想打印出两个问号时,就使用?

2. 转义字符

我们在编写C程序的时候,会想要打印出某些符号,但是因为这些符号是有特殊含义的,所以经常不能如愿,接下来就是转义字符了

转义字符(escape sequence)由一个反斜杠加上一个或多个其他字符组成。

?在书写连续多个问号时使用,防止它们被解释为三字母词。

"用于表示一个字符串常量内部的双引号。

'用于表示字符常量‘。

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

a警告字符。
退格键
f进纸字符
换行符
回车符
水平制表符
v水平制表符
dddddd表示1~3个八进制数字,表示八进制所对应的十进制数对应ASCII对应的字符。
xddd与上例类似,只是八进制数换成了十六进制数

3.小例题

     这里我们来看一道题目

len = strlen("c:code est en.c");

这个时候len的结果是15,因为为当成是一个转义字符的标识,所以这里c和 被分别当成是一个字符

变式1:len = strlen("c:\code\test\ten.c");

结果是18,这里\被当成是一个字符,表示一个,而c和t就被当成是一个字符

变式2:len = strlen("c:\code\test\ten.c123");

结果是19,因为后面的123,是上文中转义字符的一种,表示123八进制所对应的十进制数对应的asall码多对应的字符

变式3:len = strlen("c:\code\test\ten.c23");

这里的结果是还是19,题目没有把作为结束的标识

变式4:len = strlen("c:\code\test\0ten.c23");

这里的结果是12,因为在这里被当成是结束的字符串标识,并且不被strlen统计成一个字符

更多相关:

  • 题目:   请你来实现一个 atoi 函数,使其能将字符串转换成整数。   首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。   当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组...

  • 联考考试考到了这个题,随机化40分,现在来秒掉它吧。   题意: 给一个字符串,求其中的一段,使得出现次数最多的字符与出现次数最少的字符的出现次数之差最大。 输入输出样例 输入样例#1: 复制 10 aabbaaabab 输出样例#1: 复制 3   我们定义$cnt[i][j]$表示区间$[1,i]$中,j出现的次数, 定义...

  • 本推文主要识别的验证码是这种:第一步: 二值化所谓二值化就是把不需要的信息通通去除,比如背景,干扰线,干扰像素等等,只剩下需要识别的文字,让图片变成2进制点阵。第二步: 文字分割为了能识别出字符,需要对要识别的文字图图片进行分割,把每个字符作为单独的一个图片看待。第三步: 标准化对于部分特殊的验证码,需要对分割后的图片进行标准化处理,...

  •   源字符串: a a 1 ~`!@#$%^&()_+-={}[];',.- + 编码后: a%20a%201%20~%60%21@%23$%25%5E&%28%29_+-=%7B%7D%5B%5D;%27,.-%20+   源字符串: 变 ~!@#¥%…………&()——+=-·{}:“;‘、《》?,。、-+A a 1 编码后:...

  • 原文出处: 韩昊    1 2 3 4 5 6 7 8 9 10 作 者:韩 昊 知 乎:Heinrich 微 博:@花生油工人 知乎专栏:与时间无关的故事   谨以此文献给大连海事大学的吴楠老师,柳晓鸣老师,王新年老师以及张晶泊老师。   转载的同学请保留上面这句话,谢谢。如果还能保留文章来源就更感激不尽了。 我保证这篇文章...

  • 原文出处: 韩昊   我保证这篇文章和你以前看过的所有文章都不同,这是 2012 年还在果壳的时候写的,但是当时没有来得及写完就出国了……于是拖了两年,嗯,我是拖延症患者…… 这篇文章的核心思想就是: 要让读者在不看任何数学公式的情况下理解傅里叶分析。 傅里叶分析不仅仅是一个数学工具,更是一种可以彻底颠覆一个人以前世界观的思维...

  • 很多Linux高手都喜欢使用screen命令,screen命令可以使你轻松地使用一个终端控制其他终端。尽管screen本身是一个非常有用的工具,byobu作为screen的增强版本,比screen更加好用而且美观,并且提供有用的信息和快捷的热键。 想象一下这样一个场景:你通过Secure Shell(ssh)链接到一个服务器,并...

  • NarrowbandPrimary Synchronization Signal时域位置每1个SFN存在一个NPSSSFNSubframeSymbol长度每个SFN5最后11个symbol11个symbols频域位置NB-IOT下行带宽固定180kHz,一个PRB,12个子载波。...

  •  [h1]反斜杠只能够阻止一个字符  [h2]位于键盘的左上角,和~公用一个键。...

  • 常用的正则表达式 0-9  pattern="[0-9]*" 信用卡  [0-9]{13,16} 银联卡  ^62[0-5]d{13,16}$ Visa: ^4[0-9]{12}(?:[0-9]{3})?$ 万事达:^5[1-5][0-9]{14}$ QQ号码: [1-9][0-9]{4,14} 手机号码:^(13[0-...