为什么在C中没有使用反斜杠转义百分比字符?

acg*_*ant 19 c printf escaping special-characters

printf()文件说,如果有人想打印%在C,他可以使用:

printf("%%")
Run Code Online (Sandbox Code Playgroud)

为什么不是:

printf("\%")
Run Code Online (Sandbox Code Playgroud)

和其他特殊字符一样?

Eri*_*hil 37

解释程序的源文本时,编译器会处理反斜杠.因此,常见的结果是源文本"\%"生成一个包含"%"的字符串.

格式字符串由printf例程解释,因此它处理传递给它的字符.到这个时候,反斜杠不再存在,所以printf永远不会看到它.

从技术上讲,\%字符串文字中不合法.字符\开始的转义序列,并唯一合法转义序列在C中所列2011 6.4.4.4 1.他们\后面',",?,\,a,b,f,n,r,t,v,一到三个八进制数字,x和十六进制数字,u四十六进制数字,或U八个十六进制数字.

如果printf设计为反斜杠会逃脱一个百分比,那么你必须通过转义源文本中的反斜杠来传递反斜杠,所以你必须写:

printf("\\%");
Run Code Online (Sandbox Code Playgroud)


Kni*_*nug 28

因为%是由处理printf.它不是C中的特殊字符,但printf它本身对待它的方式不同.