C语言转义字符

2021-04-12  本文已影响0人  psh_11

当你在C语言中调用printf函数时,您要提供一个字符串作为其参数。如果这个字符串只包括一些文字字符,那么printf将输出文字字符的内容。

代码 结果

如果我们想要输出一段文字,然后换行再输出一段文字该怎么办?
我们需要表示换行这么一个操作,比如printf("this is psh换行is also boke");。它的结果应该看起来是这样的:

this is psh
is also boke

C语言的做法是“牺牲”掉反斜杠(\)作为特殊符号,换行符是\n。
这被称为转义序列,虽然转义序列是两个字符'\'加上’n'(这也是它为什么被叫序列的原因)。但是计算字符串长度的时候,只算它一个字符的长度,所以它也被叫转义字符。
转义序列都以反斜杠(\)字符开始。还有一个例子就是制表符\t,这就是键盘上Tab(table)键的功能,换行符\n就是Enter键的功能。

如果你想在字符串中表示反斜杠(\),你就得用\\两个反斜杠。
新手常犯的一个错误,就是想当然的使用一个反斜杠\来表示\。
这通常会导致两种错误。
第一种:\后面接的是空白,编译器会报错:unknown escape sequence: '\040'

这里的040是八进制表示,转为十六进制就是0x20,这是空格字符的ASCII码。
编译器不认识'\040'这个转义字符,也就是一个反斜杠后加一个空格。
也就是说没有这种转义字符,编译器识别不出来,只能报错。

前三格分别是空格的二进制,十进制,十六进制ASCII码

当然还有别的情况,比如后面接了其它的字符,但情况是一样的。
但根本原因是没有用\\来表示一个反斜杠,所以要像这样加上一个反斜杠:

输出正常

第二种:\后面接的是一个",编译器会报错:missing terminating " character

就是说这个字符串缺少终止字符",C语言用 " 来表示字面串的开始和结束,之前\ 用来表示转义序列的开始,以后面跟的其他字符作为结束。
他们是一样的,C语言也牺牲掉了 " 符号,所以你如果想在字符串中表示 " ,你就得使用\"。
然后这个错误恰恰是由此而产生的,因为'\"'是一个合法的转义序列,而不像'\040'是一个非法的转义序列。
编译器识别了它,却导致字符串失去了终止符。

在C下想要表示windows的路径你得这么写:

"C:\\Program Files\\World of Warcraft"

linux系统下的路径分割符是斜杠(/),就不需要这样写,显然C和Unix系的关系要更“紧密”。

这里说一下,字符串的结束标志是'\0'字符,而且它是不计入字符串长度的,相信这一点这很好理解由。由" "包围的字面串会在末尾自动添加'\0'。
比如

"hello\0world\0"

这个字面串里有三个字符串,分别是
hello,world和\0

另外再说一个小技巧,你可以写<num>的方式来显示值num所表示的ASCII字符。如果你想显示一个你不能在你的键盘上输入的字符,这个技巧就很有用。
\后接八进制形式的ASCII编码值,\x开头表示后跟十六进制形式的编码值。
对于转义字符来说,只能使用八进制或者十六进制

这取决于你的电脑对扩展ASCII码的支持,十进制ASCII码值在128-255间的ASCII码称作扩展ASCII码。我们以扩展十进制ASCII码值为128的字符€为例。

这里使用了mingw,之前用的在线编译器卡住了... 以上两个代码的结果均为€
上一篇下一篇

猜你喜欢

热点阅读