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

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

 printf("%%") 

为什么不是:

 printf("\%") 

和其他特殊字符一样?

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

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

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

从技术上讲, \%在字符串文字中是不合法的。 字符\开始一个转义序列,唯一合法的转义序列在C 2011 6.4.4.4中列出1.它们是\后跟'"?\abfnrtv ,一到三个八进制数字, x和hex数字, u和四个hex数字,或U和八个hex数字。

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

 printf("\\%"); 

惯例是特殊角色逃避自己。 因此,它不是使用反斜杠来逃避百分比,而是逃脱了自己。 (注意,要将反斜杠传递给printf ,您必须将字符串文字写为"\\%" 。)

你能行的 !!!!!

 #include  #include  #include "stdio.h" using namespace std; int main(int argc, char **argv) { printf("hhhhhhh %s \n","\%"); printf("hhhhhhh \n"); return 0; } 

printf存在问题,与您使用的编译器不同。使用wxWidget lib,您不能将printf与两个转义序列一起使用

 printf(" xxxxxx \0x81 xx \0x82 xx \n"); 

不要去。 但如果你使用

 printf(" xxxxxx %s xx %s \n","\0x81","\0x82"); 

你是对的。 一个好处