转义字符表:
转义字符 | 意义 | ASCII码值(十进制) |
\a | 响铃(BEL) | 007 |
\b | 退格(BS) | 008 |
\f | 换页(FF) | 012 |
\n | 换行(LF) | 010 |
\r | 回车(CR) | 013 |
\t | 水平制表(HT) | 009 |
\v | 垂直制表(VT) | 011 |
\\ | 反斜杠 | 092 |
\? | 问号字符 | 063 |
\' | 单引号字符 | 039 |
\" | 双引号字符 | 034 |
\0 | 空字符(NULL) | 000 |
\ddd | 任意字符 | 三位八进制 |
\xhh | 任意字符 | 二位十六进制 |
那在字符串中转义字符又是如何表示呢?
char *s1="\\\\abcd";
char *s2="\0778"
char *s3="\101"
char *s4="\00081"
它们的长度分别为: s1 s2 s3 s4
6 2 1 2
它们的内容分别是: \\abcd ?8 A 81
注:strlen(s4) = 0
内容为什么是这样子的呢?
1 其实转义字符后面是数字的话,默认是8进制的,077对应十进制数字为 63,在ASCII码表中就是一个'?',101对应的十进制数字为65,ASCII码表中对应字母‘A’,所以显示的结果分别为"?8"和 “A”
2 转义字符后数字默认为三位,但是三位中出现了非8进制的数字,则会去8进制数字之前的数作为转义的数值,如\000 \008 会分别取3个0和2个0作为转义字符
实验程序:
char s[20]="123\0009";
printf("len: %d\n",strlen(s));
printf("s: %s\n",s);
FILE *a;
a=fopen("c:\\a.txt","wt+");
if(a!=NULL)
{
fwrite(s,7,1,a);
fclose(a);
}
else
printf("false");
}
文件中的内容:
输出123没有输出后面的9是因为输出字符串时遇到“\0”("\000")就会结束,写文件时是全部写入,不区分是否有字符串结束符,所以9也会被写进文件去。
然后再做稍微的改动
char s[20]="123\090";
printf("len: %d\n",strlen(s));
printf("s: %s\n",s);
FILE *a;
a=fopen("c:\\a.txt","wt+");
if(a!=NULL)
{
fwrite(s,7,1,a);
fclose(a);
}
else
printf("false");
文件中的内容:
这是因为"\0"之后紧跟着9,不是8进制范围内的数字,所以之后的内容就当做是文本写进了文件,而不是一定写\之后的连续三个数字