《 C 语言的一些“骚操作”及其深层理解》之转义符\与字符串常量的连接
扫描二维码
随时随地手机看文章
一、转义符\
C语言中要表达一个字节数据序列(内存中连续存储的若干个字节),我们可以使用字节数组,如unsigned char array[10]={0,1,2,3,4,5,6,7,8,9}。其实字符串,本质上也是一个字节序列,但是通常情况下它所存储的字节的值均为ASCII中可打印字符的码值,如’A’、’‘、’|’等。那在字符串中是否也可以出现其它的值呢?这样,我们就可以用字符串的形式来表达一个字节序列了。很多时候,它可能比字节数组要方便一些。字符串中的转义符就是用来干这个的。请看如下程序:
这两种写法,array所指向的内存字节序列是基本一样的(后者最后还有一个0)。当然,如果我们把array传到strlen去计算长度,返回的值为0。因为它第一个字节的值为0。但是我们仍然可以使用array[n]的方式去访问序列中的数据。
上面程序中的两种写法,是完成等价的。
字符串中的转义符的目的是为了在本应该只能看到ASCII可打印字符的序列中,可以表达其它数值或特殊字符。如经常使用的回车换行”\r\n”,其实质就是”\x0d\x0a”;通常我们所说的字符串结束符\0,其实就是0的八进制转义表达形式。
二、字符串常量的连接
在研读一些开源软件的源代码时,我见到了字符串常量的一个比较另类的用法,在这里介绍给大家。
有些时候,为了让字符串常量内容层次更加清晰,就可以把一个长字符串打散成若干个短字符串,它们顺序首尾相接,在意义上与长字符串是等价的。比如"0123456789ABCDEF"可以分解为”0123456789””ABCDEF”,即多个字符串常量可以直接连接,够成长字符串。这种写法,在printf打印调试信息的时候可能会更多用到。
在printf的格式化串很长的时候,我们把它合理的打散,分为多行,程序就会显得更多工整。