转义字符

转义字符表:

转义字符意义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进制范围内的数字,所以之后的内容就当做是文本写进了文件,而不是一定写\之后的连续三个数字

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值