首先,我们先来看一下下面这段程序,猜一下运行结果:
<span style="font-size:12px;">#include<stdio.h> int main() { printf("Delete file (are you sure??)"); return 0; }</span>
执行结果如下:
你会发现,本应该是‘)’的地方变成了‘]’,这个时候,就出现了三字母词的概念。
三字母词(trigrph)就是几个字符的序列,合起来表示另一个字符,三字母词使C环境可以在某些缺少一些必须字符的字符集上实现。这里列出了一些三字母词以及它们所代表的的字符。
??( [ ??< { ??= #
??) ] ??> } ??/ \
??! | ??' ^ ??- ~
两个问号开头再尾随一个字符一般不会出现在其他表达式中,所以把三字母词用这种形式来表示,这样就不会引起误解。
当你再编写程序时,有时会需要使用一些特定的字符,比如说双引号“,却无法如愿,因为该字符在这个环境中有特定的意义。例如,双引号”用于定界字符串常量,那么你如何在字符串常量内部中使用双引号呢?这个时候就需要了解转义字符的概念。
转义字符(escape sequence)由一个反斜杠\加上一个或多个其他字符组成。
\?在书写连续多个问号时使用,防止它们被解释为三字母词。
\"用于表示一个字符串常量内部的双引号。
\'用于表示字符常量‘。
\\用于表示一个反斜杠,防止它被解释为一个转义序列符。
\a 警告字符。 \b 退格键 \f 进纸字符 \n 换行符 \r 回车符 \t 水平制表符 \v 水平制表符 \ddd ddd表示1~3个八进制数字,表示八进制所对应的十进制数对应ASCII对应的字符。 \xddd 与上例类似,只是八进制数换成了十六进制数
1.实例:
<span style="font-size:12px;">#include<stdio.h> int main() { printf("\130"); return 0; }</span>
2.应用:
<span style="font-size:12px;">#include<stdio.h> int main() { printf("c:test\add\11_20\test.c"); return 0; }</span>求输出字符串,共有几个字符?
执行结果如下:
共有19个字符,一定要注意其中的转义字符,为了确认结果正确,我们可以调用一下strlen函数,
<span style="font-size:12px;">include<stdio.h> int main() { printf("c:test\add\11_20\test.c"); printf("%d\n",strlen("c:test\add\11_20\test.c")); return 0; }</span>
执行结果:
需要特别注意的是,不同的编译环境,有关三字母词与转义字符的程序的执行结果是不同的,这个需要自己在使用过程中注意。
以下是第一个例子在VS中的结果,其余均在VC6.0的编译环境下执行。