• C语言——转义字符


    C语言——转义字符

    ​ 转义字符(Escape character),所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。而C中定义了一些字母前加""来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。

    常见转义字符

    转义字符释义
    ?在书写连续多个问号时使用,防止他们被解析成三字母词
    \`用于表示字符常量`
    \"用于表示一个字符产内部的双引号
    \\用于表示一个反斜杠,防止它被解释为一个转义序列符
    \a警告字符,蜂鸣
    \b退格符
    \f进纸符
    \n换行
    \r回车
    \t水平制表符
    \v垂直制表符
    \dddddd表示1~3个八进制的数字。如:\130X
    \xdddd表示2个十六进制数字。如:\x30 0

    ?

    在某些编译器下 ,会将 “ ??) ” 解析成 三字母词 “ ] ” ,所以在该编译器下调用printf函数打印 “??)”会打印出 “ ] ” ,所以在要打印 “ ??) ”时,为了防止被解析成三字母词,在它前面加 " \",改成 ” ??) “。


    \`

    在这样打印单引号时会造成编译器无法编译,

    printf("%c",''');
    
    • 1

    此时在 ’ 前加\将它转义就可以打印出来了,

    像这样

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qR4bheyT-1659353618581)(C:\Users\86184\Desktop\屏幕截图 2022-08-01 171755.png)]printf(“%c”,‘’');

    
    ---
    
    
    
    ### \\"
    
    与\\`用法相同,这里就不再赘述了。
    
    ---
    
    
    
    ### \\\
    
    表示一个反斜杠,防止它被解释为一个转义序列符,
    
    例如:当你想打印一个文件路径时,如果直接这样写:
    
    ```c
    printf("c:\test\test.c");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    那打印出来的结果将是这样:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WRv7J5qr-1659353582866)(C:\Users\86184\Desktop\屏幕截图 2022-08-01 172153.png)]

    因为 \t 会被编译器解析为水平制表符,

    正确的写法是在 \ 的前面加 \ 进行转义, 防止被解析为 \t,

    printf("c:\\test\\test.c");
    
    • 1

    打印出来的结果是这样的:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BKTjU3eZ-1659353582867)(C:\Users\86184\Desktop\屏幕截图 2022-08-01 172245.png)]


    \a

    在打印 \a 时会触发电脑上的蜂鸣器


    \ddd

    ddd表示1-3个八进制的数字。将ddd三个数字转换成十进制,十进制数对应的ASCAII就是结果。

    猜一猜下面的代码打印出的是什么?

    printf("%c",'\130');
    
    • 1

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-brbv41SJ-1659353582867)(C:\Users\86184\Desktop\屏幕截图 2022-08-01 174147.png)]

    ​ 为什么是X?

    因为输出结果为字符型,将八进制数字130转换为十进制为88,然后输出在[ASCII表](ASCII_百度百科 (baidu.com))中对应的字符X。

    如果输出类型为整型,打印的结果就是八进制130转换为十进制的结果

    像这样:

    printf("%d",'\130');
    
    • 1

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bHyvPLqI-1659353582868)(C:\Users\86184\Desktop\屏幕截图 2022-08-01 180136.png)]

    ​ 其实 \ddd 最多只支持三位数字,并且三位数字也不是任意的(每个数字不能大于8,一旦大于8它就不是八进制数了),一旦大于等于八进制数 '/400 '(十进制256=8进制400)就超过了ascall码的范围,编译器就会报错。另外大于三位,或者遇到非八进制数字时则转换结束,直接取末尾数字。


    同样首先要了解的是dd表示2个十六进制数,

    猜一猜下面的代码打印出的是什么?

    ![屏幕截图 2022-08-01 181248](C:\Users\86184\Desktop\屏幕截图 2022-08-01 181248.png)printf("%c",'\x30');
    
    • 1

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yccGFWeY-1659353582868)(C:\Users\86184\Desktop\屏幕截图 2022-08-01 180933.png)]

    为什么是0?

    因为输出结果为字符型,将十六进制数字30转换为十进制为48,然后输出在ASCII表中对应的字符0。

    同样的,如果输出类型为整型,打印的结果就是十六进制30转换为十进制的结果。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sGttqXJL-1659353582868)(C:\Users\86184\Desktop\屏幕截图 2022-08-01 181248.png)]


    练习题

    1. 下面的代码打印的数字是多少?

    printf("%d",strlen("qwer t"));
    
    • 1

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UKqui1bE-1659353582869)(C:\Users\86184\Desktop\屏幕截图 2022-08-01 182450.png)]

    为什么是6呢?

    • 首先,strlen求得是字符串长度
    • 其次,空格也算一个字符
    • 然后,字符串末尾的\0不算是字符

    所以结果就是6了。

    2. 下面的代码打印的数字是多少?

    printf("%d",strlen("c:\test\628\test.c"));
    
    • 1

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iDX9fj7Q-1659353582869)(C:\Users\86184\Desktop\屏幕截图 2022-08-01 183337.png)]

    为什么是14呢?

    因为这个字符串中有转义字符存在。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-09RpM9yh-1659353582869)(C:\Users\86184\Desktop\屏幕截图 2022-08-01 184059.png)]

    红色方框里的部分都会被转义成一个字符,一共有14个字符,所以结果是14。

  • 相关阅读:
    迅为RK3399开发板Android 系统--打印级别设置(printk日志等级设置)
    大老耗时90天完成,带你从实践出发,深入学习Mycat中间件,拥抱Mycat
    vue——路由之路由跳转、路由传参、路由嵌套、路由模式
    通过jsoup抓取谷歌商店评分
    低代码在离散制造业的实践
    2021年数学建模国赛A题优秀论文(Word)(FAST”工作抛物面的优化设计)
    探秘亚马逊云科技海外服务器 | 解析跨境云计算的前沿技术与应用
    RISC-V峰会一周年,全志做了这些事
    2022年10月31日-11月6日(ue5 pak收尾)
    git + docker + docker-compose + Jenkins+Linux 自动化构建、部署、测试过程
  • 原文地址:https://blog.csdn.net/qq_45559559/article/details/126107538