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 水平制表符 /ddd ddd表示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统计成一个字符
新闻热点
疑难解答