转义字符与字符串的长度

在计算包含转义字符的字符串长度时,需要特别注意转义字符的长度判断,这在考试、面试题中较为常见。

举例如下(可先尝试计算下执行结果):

C代码
  1. char str[] = "vmx43\np1434q3aabc";   
  2. printf("%d, %dn", strlen(str), sizeof(str));   
  3. printf("%s", str);  

该段代码执行的结果是:

11, 15
vmC
pc4q3a

我们来进行分析一下。
对于字符串str,我们这样划分下就清晰了:

XML/HTML代码
  1. v   
  2. m   
  3. x43   
  4. \   
  5. n   
  6. p   
  7. 143   
  8. 4   
  9. q   
  10. 3   
  11. a   
  12. abc  

这里特别应该注意第3、7、10、12行。
第3行是对十六进制的转义(ascii值67,即字符C),第7、10行是对八进制的转义(ascii值分别为99、51,即字符c和3),而最后一行因为使得字符串标记到此结束,但其后面的字符依然会被存储。所以字符串str的长度是11,而占用的空间大小却是15。

参考如下转义字符表,你就更加明白了

c语言转义字符表

所有的转义字符和所对应的意义:

转义字符 意义 ASCII码值(十进制)
a 响铃(BEL) 007
b 退格(BS) ,将当前位置移到前一列 008
f 换页(FF),将当前位置移到下页开头 012
n 换行(LF) ,将当前位置移到下一行开头 010
r 回车(CR) ,将当前位置移到本行开头 013
t 水平制表(HT) (跳到下一个TAB位置) 009
v 垂直制表(VT) 011
\ 代表一个反斜线字符''' 092
' 代表一个单引号(撇号)字符 039
" 代表一个双引号字符 034
空字符(NULL) 000
ddd 1到3位八进制数所代表的任意字符 三位八进制
xhh 1到2位十六进制所代表的任意字符 二位十六进制
点赞 (0)

发表评论

电子邮件地址不会被公开。 必填项已用*标注