首页 > 学院 > 开发设计 > 正文

三字母词和转义字符

2019-11-11 02:30:32
字体:
来源:转载
供稿:网友

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统计成一个字符


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表