在C语言中,提到三个反斜杠,就像这样:
#include <stdio.h>
int main() {
printf(" \\\ ");
}
在输出中仅输出一个反斜杠。为什么以及如何运作?
答案 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