连接两个字符以创建转义序列

时间:2013-10-20 13:09:18

标签: c string special-characters string-formatting

想法是尝试以人类的方式创建转义序列。例如,我使用两个字符来创建'\n''\''n' 我在想的是char array[3]={'\\','n','\0'};
所以我可以更改'n'字符并仍然将其用作转义序列。

当我printf(array)现在打印出来时:

\n

我希望它能够进入下一行。

例如:
如果我想手动检查字母表中的每个字母在用作带循环的转义序列时会发生什么呢?

for(char='a';char<='z';char++) 
{
  /* create escape sequence with that letter */
  /* print that escape sequence and see what it does */
}

这不是一项任务,没有实际用途(至少现在还没有),但只是一个我无法在任何地方找到答案的理论问题,也不是我自己想出来的。

2 个答案:

答案 0 :(得分:2)

转义序列表示单个字符,并在编译时进行评估。在运行时,您不能将文字字符串解释为转义序列。 例如&#39; \ n&#39;是换行符(或换行符 - ASCII中的0x0A)

请注意:

char array[3]={'\\','n','\0'};

相当于:

 char array[3] = "\\n" ;

所以当你printf(array)打印\n时,也许不出所料 - 这就是你要求它做的事情。

未定义的转义序列只是简单地编译,所以你可能只是:

char = '\a' ;
char = '\b' ;
... // etc.

并查看编译器所在的行。然而,这不是完整的故事,因为一些转义序列需要操作数,例如\x本身没有意义,而\xab是由0xab表示的字符(171十进制) )。其他人甚至不是信件。大多数都与白色空间有关,它们的影响可能取决于执行平台的终端或控制台功能。因此,天真的调查可能无法生成您所寻求的结果,因为它不会考虑语言语义或平台功能。

所有支持的转义序列实际上已经定义好了 - 除了与平台功能相关的那些(例如,如果您的目标无法生成蜂鸣声,\ a将没有任何有用的效果)之外,您将发现一些惊喜。 :

    \a      Beep
    \b      Backspace
    \f      Form-feed
    \n      Newline
    \r      Carriage return
    \t      Horizontal tab
    \v      Vertical tab
    \\      Backslash
    \'      Single quotation mark
    \"      Double quotation mark
    \0      ASCII 0x00 (null terminator)
    \ooo    Octal representation
    \xdd    Hexadecimal representation

答案 1 :(得分:0)

编写自己的printf()怎么样? 您可以在哪里检查'\'后跟'n',而不是仅从char [0]打印到'\''n'。最后添加“printf(”\ n“);

MFG