三字母词和转义字符

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警告字符。
\b退格键
\f进纸字符
\n换行符
\r回车符
\t水平制表符
\v水平制表符
\dddddd表示1~3个八进制数字,表示八进制所对应的十进制数对应ASCII对应的字符。
\xddd与上例类似,只是八进制数换成了十六进制数

3.小例题

     这里我们来看一道题目

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

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

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

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

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

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值