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

3

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

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");
    }
}

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

4个回答

12

将斜杠进行转义(使用 " \\a"),这样它们就不会被特别解释了。另外建议至少使用查找表或者 switch

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

1
你是不是指的是 printf(" \\0"); 等等? - Praetorian

8

在字符串字面值中,反斜杠需要转义;所以你需要使用"\\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;这样做的折衷是我不必担心将字符值映射到数组索引。


ecs 代表什么? - Gabriel Staples

3

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

示例:

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");
}

应该适合你!


0

如果你想在 printf 中转义 %d 以允许你实际打印字符 "%d" :

printf("%%d"); 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接