C 语言转义序列 | 标准空白字符特性与常用转义符用法

注:本文为 “C 语言转义序列” 相关合辑。
略作重排,未整理去重。
如有内容异常,请看原文。


对C标准中空白字符(空格、回车符(\r)、换行符(\n)、水平制表符(\t)、垂直制表符(\v)、换页符(\f))的理解

boyinnju 于 2011-10-16 00:01:06 发布

C 语言空白字符解析

1 概述

C 标准库头文件 ctype.h 提供如下接口:

int isspace(int c);

该函数判定参数 c 是否属于标准空白字符。依据 ISO/IEC 9899:2018 §7.4.1.10,空白字符集包含以下 6 个字符:

字符转义序列十进制码值十六进制码值名称
SP' '320x20空格
HT'\t'90x09水平制表符
VT'\v'110x0B垂直制表符
FF'\f'120x0C换页符
CR'\r'130x0D回车符
LF'\n'100x0A换行符

下文分节讨论各字符的语义、终端行为与文件存储差异。

2 空格 (SP, 0x20)

空格字符的编码为 0x20,而非 0x00。后者表示空字符(NULL),常用于字符串终止。

3 回车符 (CR, '\r')

回车符仅将光标移至当前行行首,不隐含换行。若后续仍有输出,则会产生覆盖。

示例:

puts("hello world!\rxxx");

终端实际显示:

xxxlo world!

若将相同字节序列写入文本文件,不同编辑器呈现如下:

  • vi:以 ^M 显示 0x0D

    在这里插入图片描述

  • Windows 记事本:不呈现控制图形

    在这里插入图片描述

4 换行符 (LF, '\n')

换行符将光标移至下一行,列位置保持不变。终端输出与文件存储行为存在系统差异:

系统行尾序列
UnixLF
WindowsCR LF
macOSCR

5 水平制表符 (HT, '\t')

水平制表符用于实现“跳格”对齐,默认制表宽度为 8 列。其停止位满足列号:

column = 8 n , n ∈ N 0 \text{column} = 8 n,\quad n \in \mathbb{N}_0 column=8n,nN0

示例:

puts("0123456\txx");
puts("0123456t\txx");

终端输出:

在这里插入图片描述

6 垂直制表符 (VT, '\v')

垂直制表符使后续字符从下一行、当前列 +1 位置开始输出,常用于早期打印设备。

示例:

puts("01\v2345");

终端输出:

在这里插入图片描述

7 换页符 (FF, '\f')

换页符在终端中等价于执行 clear 命令:先清屏,再输出后续内容。若写入文本文件,多数编辑器将其视为普通控制字符,无清屏语义。

8 小结

字符 '\r''\t''\v''\f' 均属控制字符,其可视化效果取决于输出环境:

  • 终端:按控制语义解释
  • 文本文件:由编辑器自行决定呈现方式,通常不触发控制动作

转义序列字符(\0,\n,\r,\t,\v,\a,\f,\b,\,\‘,\“,?)详解,转义字符对应的全称,输出结果和对应的ASCII码值详解

南城花开过 于 2022-12-10 08:54:21 修改

环境说明:64-bit Windows + MinGW64。不同设备、编译器或终端环境下,部分转义序列的表现可能存在差异。

1 引言

转义序列(Escape Sequence)以反斜杠 \ 引导,用于表示无法直接输入(如控制字符)或具有特殊语义的字符。每个转义序列对应唯一的 ASCII 码值,且在输出时表现出特定的行为逻辑,是 C 语言处理字符输出的基础。

2 转义序列总览(汇编 & 编程场景 ASCII 码值)

转义字符英文全称说明ASCII 码值(汇编)ASCII 码值(编程)
\0NULL字符串结束标记(空字符)00H / 00x00 / 0
\nNew Line换行,光标移至下一行开头0AH / 100x0A / 10
\rCarriage Return回车,光标移至当前行行首0DH / 130x0D / 13
\tHorizontal Tab水平制表符(等效按 Tab 键,默认 8 空格缩进)09H / 90x09 / 9
\vVertical Tab垂直制表符,后续字符从下一行下一列开始输出0BH / 110x0B / 11
\aBell (Alert)响铃(终端发出提示音)07H / 70x07 / 7
\fForm Feed换页符,清空当前输出区域后换行输出0CH / 120x0C / 12
\bBackspace退格,光标左移一位(覆盖前一字符)08H / 80x08 / 8
\\Backslash输出转义后的反斜杠:\5CH / 920x5C / 92
\?Question Mark输出问号:?3FH / 630x3F / 63
\'Single Quote输出单引号:'27H / 390x27 / 39
\"Double Quote输出双引号:"22H / 340x22 / 34

3 典型转义序列示例

3.1 \0:空字符(字符串结束标志)

  • 功能:作为字符串的终止符,系统会自动添加在字符串末尾;程序输出字符串时,遇到 \0 即停止输出。
  • 示例代码
    #include <stdio.h>
    int main() {
        printf("hello world\0test"); // \0 后的 "test" 不会输出
        return 0;
    }
    
  • 输出结果
    hello world
    

3.2 \n:换行符

  • 功能:将输出光标移动到下一行的起始位置,是最常用的换行控制符。
  • 示例代码
    #include <stdio.h>
    int main() {
        printf("第一行内容\n第二行内容");
        return 0;
    }
    
  • 输出结果
    第一行内容
    第二行内容
    

3.3 \r:回车符

  • 功能:仅将光标移至当前行开头,不换行、不删除原有内容,后续输出会覆盖行首字符。
  • 示例代码(回车+覆盖)
    #include <stdio.h>
    int main() {
        printf("hello world\rworld"); // 光标回行首后,"world" 覆盖前 5 个字符
        return 0;
    }
    
  • 输出结果
    world world
    

3.4 \t:水平制表符

  • 功能:等效于按下 Tab 键,用于快速对齐输出内容(默认缩进 8 个空格)。
  • 示例代码
    #include <stdio.h>
    int main() {
        printf("姓名\t年龄\t性别\n");
        printf("张三\t20\t男\n");
        return 0;
    }
    
  • 输出结果
    姓名    年龄    性别
    张三    20      男
    

3.5 \v:垂直制表符

  • 功能:后续字符从下一行、当前字符的下一列开始输出,与 \f 行为相似但不清空屏幕。
  • 示例代码
    #include <stdio.h>
    int main() {
        printf("hello\vworld"); // "world" 从下一行第 6 列开始输出
        return 0;
    }
    
  • 输出结果
    hello
         world
    

3.6 \a:响铃符

  • 功能:触发终端响铃(无字符输出,仅听觉提示)。
  • 示例代码
    #include <stdio.h>
    int main() {
        printf("操作完成\a"); // 输出"操作完成"后终端响铃
        return 0;
    }
    
  • 输出结果
    操作完成
    
    (终端同时发出提示音)

3.7 \f:换页符

  • 功能:清空当前输出区域后换行输出,行为接近 \v 但会重置输出区域。
  • 示例代码
    #include <stdio.h>
    int main() {
        printf("原有内容\f新内容"); // 清空原有内容后输出"新内容"
        return 0;
    }
    
  • 输出结果
    新内容
    

3.8 \b:退格符

  • 功能:光标左移一位,覆盖前一个字符(而非真正删除)。
  • 示例代码
    #include <stdio.h>
    int main() {
        printf("hello!\bk"); // \b 覆盖"!"为"k"
        return 0;
    }
    
  • 输出结果
    hellok
    

3.9 转义符(\\/\?/\'/\"

此类转义序列用于输出具有特殊语义的字符(本身是转义符或引号),功能为“输出字符本身”,示例如下:

转义字符示例代码输出结果
\\printf("\\");\
\?printf("\?");?
\'printf("\'");'
\"printf("\"");"

4 总结

C 语言转义序列本质是“多字符表示单一语义字符”,其 ASCII 码值由标准定义,输出行为则受运行环境(操作系统、终端、编译器)影响。


C 语言空白字符与控制转义序列

依据:ISO/IEC 9899:2018 (C17)、POSIX.1-2017、Linux man-pages 6.9

1 转义序列全集(标准 + 通用扩展)

序列码值标准说明
\00x00字符串结束(空字符)
\a0x07告警(蜂鸣)
\b0x08退格
\t0x09水平制表
\n0x0A换行
\v0x0B垂直制表
\f0x0C换页
\r0x0D回车
"0x22双引号
0x27单引号
?0x3F问号
\0x5C反斜杠
\e0x1BESC(GCC/Clang 扩展)

【数值写法】

  • 八进制: \033
  • 十六进制:\x1B
  • 与上述扩展等价:\e

2 易错点与未定义行为

  1. 负值参数

    char c = -5;
    if (isspace(c))   /* 未定义行为 */
    

    改正:

    if (isspace((unsigned char)c)) ...
    
  2. 二进制流误用文本模式

    FILE *fp = fopen("data.bin", "w"); /* 应使用 "wb" */
    fwrite("\n", 1, 1, fp);            /* Windows 会写入 0x0D 0x0A */
    
  3. 混用 \r 与 \n 导致覆盖

  • 示例:printf("hello\rxx"); 会显示 xxllo
  • 刷新行缓冲可用 fflush(stdout)
  1. 终端特定行为依赖
  • 不同终端对控制字符的处理可能不同
  • 应避免依赖特定终端的行为

小结

  • 空白字符仅 6 个,isspace() 结果与区域设置无关
  • 控制字符在"终端"与"文件"表现可能不同
  • 转义序列在编译期解析为单个 char 值
  • 理解其数值有助于调试跨平台差异
  • 文本流和二进制流的区别需要特别注意

掌握各转义序列的数值与效应,可精准控制字符输出格式,避免因平台差异导致的显示异常(如换行/回车在 Windows 与 Linux 下的表现差异),是编写健壮字符处理程序的基础。


via:

内容概要:本文围绕SecureCRT自动化脚本开发在毕业设计中的应用,系统介绍了如何利用SecureCRT的脚本功能(支持Python、VBScript等)提升计算机、网络工程等相关专业毕业设计的效率质量。文章从关键概念入手,阐明了SecureCRT脚本的核心对象(如crt、Screen、Session)及其在解决多设备调试、重复操作、跨场景验证等毕业设计常见痛点中的价值。通过三个典型应用场景——网络设备配置一致性验证、嵌入式系统稳定性测试、云平台CLI兼容性测试,展示了脚本的实际赋能效果,并以Python实现的交换机端口安全配置验证脚本为例,深入解析了会话管理、屏幕同步、输出解析、异常处理和结果导出等关键技术细节。最后展望了低代码化、AI辅助调试和云边协同等未来发展趋势。; 适合人群:计算机、网络工程、物联网、云计算等相关专业,具备一定编程基础(尤其是Python)的本科或研究生毕业生,以及需要进行设备自动化操作的科研人员; 使用场景及目标:①实现批量网络设备配置的自动验证报告生成;②长时间自动化采集嵌入式系统串口数据;③批量执行云平台CLI命令并分析兼容性差异;目标是提升毕业设计的操作效率、增强实验可复现性数据严谨性; 阅读建议:建议读者结合自身毕业设计课题,参考文中代码案例进行本地实践,重点关注异常处理机制正则表达式的适配,并注意敏感信息(如密码)的加密管理,同时可探索将脚本外部工具(如Excel、数据库)集成以增强结果分析能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值