在 C 语言的世界里,字符串是不可或缺的一部分。但你是否遇到过这样的困境:想在字符串中输出双引号、反斜杠,或者换行,却总是出现编译错误,或者输出结果不如预期? 别担心,C 语言的转义字符就是解决这些问题的利器!
一、引言
个人认为,转义字符就是改变字符原本的意思。
简单来说,转义字符就是用反斜杠 \
开头的字符序列,它们代表着一些特殊的字符或者控制指令。因为某些字符在 C 语言中有特殊的含义(例如双引号表示字符串的开始和结束),所以不能直接在字符串中使用。转义字符的出现,就是为了让我们能够在字符串中表示这些特殊的字符。比如,我想打印一个双引号就得这样子:
printf("\"");
如果不添加 \ 的话,编译器会默认第一个和第二个双引号是一组语法结构,第三个双引号则会报错!
二、常见转义字符一览
转义字符 | 表示含义 | ASCII 码 |
\n | 换行 | 10 |
\' | 表示一个单引号 | 39 |
\" | 表示一个双引号 | 34 |
\\ | 表示一个反斜杠 | 92 |
\t | 水平制表符 | 9 |
\a | 报警符,让电脑发出“登登”的声音 | 7 |
\b | 退格符,光标往回退一格 | 8 |
\? | 表示一个问号 | |
\r | 回车符,光标移动到本行开始的地方 | 13 |
\v | 垂直制表符 | 11 |
\ddd | 16进制表示的字符 | |
\xdd | 8进制表示的字符 | |
\0 | 空字符,字符串结束的标志 | 0 |
三、个别转义字符演示
1. \t 水平制表符
光标移动到下一个制表位,一般是4/8个字节,例如:
int main()
{
printf("123456789012345678901234567890\n");
printf("\t");
getchar();
return 0;
}
上述代码的运行结果:
可以看到,在VS2022中,一个 \t 会让光标移动8个字节
如果是两个 \t 呢?
运行一下代码:
int main()
{
printf("123456789012345678901234567890\n");
printf("\t\t");
getchar();
return 0;
}
运行结果:
可以看到,两个 \t 会使光标移动16个字节,那么如果 \t 搭配着字符或者数字会怎么样?让我们一起运行一下代码:
int main()
{
printf("123456789012345678901234567890\n");
printf("abcd\t");
getchar();
return 0;
}
运行结果:
可以看到,字符的出现并不能改变光标出现在第8个字节的事实,那如果超输入超过8个字节的字符呢?让我们来看下面的代码:
int main()
{
printf("123456789012345678901234567890\n");
printf("123456789\t");
getchar();
return 0;
}
运行结果:
可以看到,光标跑到第16个字节的位置去了
通过上面的案例,我们可以得出一个结论:在屏幕中有着隐藏的网格,而 \t 的作用就是把光标从当前位置向后移动至下一个隐藏网格的结点处。垂直制表符也是如此,只不过方向由水平变成了竖直而已。
那么,水平制表符 \t 能干啥?当然是用来对齐文本的,尤其是当文本长短不一时,例如:
int main()
{
printf("张三\t%d\t女\n" , 250411);
printf("李四\t%d\t女\n" , 250412);
printf("王麻子\t%d\t男\n" , 20413);
}
运行结果:
2. \b 退格符
\b 能使光标往回退一格,例如:
printf("123456789012345678901234567890\n");
printf("abc\b");
getchar();
运行结果:
可以看到,光标往回退了一格,那如果在 \b 后面在加上一个字符呢?来看看下面的代码:
printf("123456789012345678901234567890\n");
printf("abc\b");
getchar();
运行结果:
可以看到,原本的 c 被1给覆盖了,那么,是不是可以理解为,在光标所在的地方输入字符,新字符会覆盖掉原本的旧字符。
3.\? 表示一个问号
这个转义字符主要是在书写连续多个问号时使用,防止被解析成三字母词,在如今的VS中已经无法验证了
四、总结
掌握 C 语言的转义字符是编写高质量 C 代码的基础。 它可以帮助你处理字符串中的特殊字符,控制输出格式,避免编译错误,让你的代码更加健壮和易于维护。 希望本文能够帮助你更好地理解和运用 C 语言的转义字符,在 C 语言的世界里畅游!
思考题:
如何在 C 语言中输出一个 Windows 风格的路径: C:\My Documents\Important Data
?