\\\只打印一个反斜杠?

时间:2018-06-29 09:30:32

标签: c

在C语言中,提到三个反斜杠,就像这样:

#include <stdio.h>

int main() { 
    printf(" \\\ ");
}

在输出中仅输出一个反斜杠。为什么以及如何运作?

4 个答案:

答案 0 :(得分:5)

该顺序是:

  • 一个空格
  • 双反斜杠,它在运行时字符串中编码单个反斜杠
  • 反斜杠后跟一个空格,这不是标准的转义序列,应该为您提供诊断信息

C11草案说(在注释77中):

  

这些字符的语义在5.2.2中进行了讨论。如果有其他   字符后接反斜杠,结果不是令牌,诊断为   必填。

godbolt.org上,我得到了:

<source>:8:14: warning: unknown escape sequence '\ ' [-Wunknown-escape-sequence]

因此,您似乎正在使用不合格的编译器,该编译器选择仅通过使字符通过来实现未定义的反斜杠序列。

答案 1 :(得分:1)

正在打印:

space
slash
escaped space

第三个斜杠被解释为“斜杠空间”

答案 2 :(得分:1)

C11; 6.4.4.4字符常量:

  

双引号"和问号?可以自己表示,也可以由   转义序列\"\?,但单引号'和反斜杠\   分别由转义序列\'\\ 表示。

因此,要表示单个反斜杠,必须在源代码中放置两个反斜杠\\。要打印两个\\,您需要四个反斜杠\\\\。在您的代码中,额外的\是空格字符,无效。

答案 3 :(得分:1)

这确实是c中非常简单的操作。 \只是一个转义序列。因此,下面的语句将打印两个斜杠。

  printf(" \\\\ ");  

例如,c中的某些字符用斜杠表示,例如行字符\n的末尾或字符串字符\0的末尾等。但是,如果要打印这样的字符性格,因为你会怎么做?因此,您需要在其前面添加一个转义序列字符:

printf("\\n"); // will print \n

但是

printf("\n"); // will print end of character hence you don't see anything in output