在计算包含转义字符的字符串长度时,需要特别注意转义字符的长度判断,这在考试、面试题中较为常见。
举例如下(可先尝试计算下执行结果):
C代码
- char str[] = "vmx43\np1434q3aabc";
- printf("%d, %dn", strlen(str), sizeof(str));
- printf("%s", str);
该段代码执行的结果是:
11, 15
vmC
pc4q3a
我们来进行分析一下。
对于字符串str,我们这样划分下就清晰了:
XML/HTML代码
- v
- m
- x43
- \
- n
- p
- 143
- 4
- q
- 3
- a
- 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位十六进制所代表的任意字符 | 二位十六进制 |