美文网首页
C语言转义字符

C语言转义字符

作者: psh_11 | 来源:发表于2021-04-12 22:00 被阅读0次

    当你在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,之前用的在线编译器卡住了... 以上两个代码的结果均为€

    相关文章

      网友评论

          本文标题:C语言转义字符

          本文链接:https://www.haomeiwen.com/subject/vycxlltx.html