打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
c语言转义字符

今天遇到一道题:

有以下程序:

void main(){

char a, b, c, *p;

a=’\’; b=’\xbc’; c=’\0xab’; p=”\0127”;

printf(“%c %c %c %c\n”, a, b, c, *p);

}

编译时出现错误,以下叙述中正确的是()

A. 程序中只有a=’\’;语句不正确

B. b=’\xbc’;语句不正确

C. p=”\0127”;语句不正确

D. a=’\’;和c=’\0xab’;语句都不正确

答案是D,不知道为什么,于是又去复习了一下c语言的转义字符。常用的c语言转义字符如下表所示:

这道题里a= '\’是不正确的,必须是a= '\\’,因为\标识转义字符,如果是 '\’,那\’就会被当做转义字符,字符会缺一个单引号,语法错误,需要后面再加个单引号,如a= '\”,但这样得到的字符就是\’了。关于b和c,转义字符\h、\hh、\hhh斜杠后面的是1~3位八进制数,该转义字符为ASCII码等于该值的字符;转义字符\xh、\xhh的\x后面的是1~2位十六进制数,该转义字符为ASCII码等于该值的字符。所以b= '\xbc’是对的,相当于b=0xbc,也即十进制的-68,虽然这个数对于ASCII字符没有意义,但作为char的数值是没有错的(char是带符号八位整形,取值范围为-128~127);c= '\0xab’是错的,没有这个表示方法。p=“\0127”是对的,这里\012是一个转义字符,相当于八进制的12,查ASCII表可知是换行符\n,所以p相当于p= “\n7”。所以a和c变量是错的,答案选D。

不过实际编程实现了以后发现c= '\0xab’并没有报错,只是报了两个warning,字符最后打印的值是 'b’。

warning: multi-character character constant [-Wmultichar]

warning: overflow in implicit constant conversion [-Woverflow]

这是因为 '\0xab’ 其实是个多字符字符(multi-character character),它其实是四个字符 '\0’ 'x’ 'a’ 'b’组成的,如果c是int类型的话,在windows系统下它的值会是7889250(120*256*256+97*256+98),但这里c是个char类型,所以它的值就是末尾的8bit,也就是最后一个字符 'b’。

最后附一下ASCII码表:

————————————————

版权声明:本文为CSDN博主「乌托」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/u012707739/article/details/78777344

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
c 语言
Java Character 类
06 字符串 转义字符
Unicode转义(\uXXXX)的编码和解码
基础教程:Java Character类
使用ANTLR构建PowerScript语法分析器(3) | OutOfMemory
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服