c语言中的三字母词以及转义字符

C语言中的三字母词(trigraph)
ANSI C标准中,定义了9三字母词(trigraph),三字母词就是几个字符的序列,合起来表示另一个字符。三字母词使C语言环境可以在缺少一些必需字符的字符集(比如,一些非常老式的键盘上没有[]{}#\^~|)上实现。也许是由于这些字符集我们基本上用不到,所以在大多数C语言的书籍中,我们都看不到对三字母词的讲解。下图列出了9个三字母词以及它们所代表的的字符。


源代码中的“三字母词”,在编译阶段会被替换为“对应的字符”。对于以“?”开头的字符序列,如果不能与上面9个匹配,编译器将保持原状;一旦匹配,编译器就会做替换。 下面是我们很容易犯的一个错误(摘自《C和指针》):

        如果我们想在屏幕上输出字符串"(are you ok??)"时,

printf("%s\n", "(are you ok??)");

由于编译器对于三字母词的处理所以导致我们看到的结果如下图所示:


注意:由于编译器的种类各样,对ANSI C的支持也不一样,所以可能会有些C编译器不处理“三字母词”,会将它们当做普通的字符串来处理。以上测试时我在VS2008编译环境下完成的

    所以这个时候大家应该要问了,那到底应该如何打印出我们想要的字符串呢??方法也很简单,代码如下:

printf("%s\n", "(are you ok\?\?\)");

这次的测试结果如下图:


我们在这里用到的字符"\"呢,其实就是转义字符,顾名思义呢,就是让字符变回它原来的意思。转义字符加上原来的字符组成一个新的字符。有时候我么会遇到关于转义字符的字符串求长度问题,下来我们来引入一个例子:

printf("%d\n", strlen("c:\test\abc\test.c"));

在不看结果时,我们如果没有了解关于转义字符的概念,那么这个字符串的长度应该是18,可是运行结果却出乎我们的意料,结果是15。


这是因为这个字符串里面有转义字符的配对,"\t""\a"其实是两个转移字符,只占用一个字符的长度。

如果我们想要上面的例子输出原本的字符串,那么我们只要加上转义字符'\'就好了。

printf("%s\n", "c:\test\abc\test.c");

结果如下图所示:


显然这不是我们想要的结果,所以我们可以这样处理:


我们来看一下一些转义字符变:


注意:其他的转义字符较为常见,这里要重点说的是最后两个:

1."\ddd"字符'\'后面代表的是八进制数字,举个例子:

printf("%c\n", '\060');

‘060’的十进制结果应该是48,我们以字符形式输出,则48是字符‘0’的ASCLL码值。结果如下图所示:


2."\xddd"字符'\'后面代表的是三个十六进制数,举个例子:

printf("%c\n", '\x030');
‘0x030’的十进制结果也是48,所以输出结果也是‘0’。

        今天的三字母词和转义字符就到这里了,希望大家可以多多提意见!

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值