如何将转义字符打印为字符?

我正在尝试使用以下代码将转义字符打印为字符或字符串:

while((c = fgetc(fp))!= EOF) { if(c == '\0') { printf(" \0"); } else if(c == '\a') { printf(" \a"); } else if(c == '\b') { printf(" \b"); } else if(c == '\f') { printf(" \f"); } else if(c == '\n') { printf(" \n"); } else if(c == '\r') { printf(" \r"); } else if(c == '\t') { printf(" \t"); } else if(c == '\v') { printf(" \v"); } } 

但是当我尝试它时,它实际上打印了转义序列。

转义斜杠(使用" \\a" ),这样就不会特别解释它们。 您也可能希望至少使用查找表或switch

 switch (c) { case '\0': printf(" \\0"); break; case '\a': printf(" \\a"); break; /* And so on. */ } 

字符串文字中的反斜杠需要转义; 而不是"\0" ,你需要"\\0"

查找表可能会减少痛苦:

 const char *ecs[256] = {NULL}; // assumes ASCII - may not be a valid assumption int c; ecs['\0'] = "\\0"; ecs['\a'] = "\\a"; ecs['\b'] = "\\b"; ... while ((c = fgetc(fp)) != EOF) { if (ecs[c] == NULL) printf("%c", c); else printf("%s", ecs[c]); } 

是的, ecs中的大多数条目都是NULL; 权衡是我不必担心将字符值映射到数组索引。

为此,我们需要使用双反斜杠。

例子:

 if(c == '\0') { printf(" \\0"); } else if(c == '\a') { printf(" \\a"); } else if(c == '\b') { printf(" \\b"); } else if(c == '\f') { printf(" \\f"); } else if(c == '\n') { printf(" \\n"); } else if(c == '\r') { printf(" \\r"); } else if(c == '\t') { printf(" \\t"); } else if(c == '\v') { printf(" \\v"); } 

应该适合你!

如果要在printf转义%d以允许实际打印字符“%d”:

 printf("%%d");