源代码中的“三字母词”,在编译阶段会被替换为“对应的字符”。对于以“?”开头的字符序列,如果不能与上面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’。
今天的三字母词和转义字符就到这里了,希望大家可以多多提意见!